Удалить из списка элементы с чётными номерами - C (СИ)
Формулировка задачи:
Здрасвуйте помогите реализовать следующее!удалить из списка элементы с чётными номерами! вот наработка! Спосибо заранее
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct _Element{
int Val;
struct _Element *Next;
} Element;
Element *Head = NULL,
*Curr = NULL;
int Add(int val)
{
Element *tmp = (Element *)malloc(sizeof(Element));
if(!tmp) return 0;
if(!Head){
Head=tmp;
tmp->Next=NULL;
}else{
if(!Curr) Curr=Head;
while(Curr->Next) Curr=Curr->Next;
Curr->Next=tmp;
Curr = Curr->Next;
tmp->Next=NULL;
}
tmp->Val=val; Curr=tmp;
return 1;
}
void Print(void)
{
while(Head){
Curr=Head;
Head=Head->Next;
printf("%d ",Curr->Val);
}
}
void Destroy(void)
{
while(Head){
Curr=Head;
Head=Head->Next;
free(Curr);
}
Curr=NULL; Head=NULL;
}
int Del(void)
{
if(Curr==NULL) return 0;
Element *tmp=Curr->Next;
free(Curr);
Curr = tmp;
return 1;
}
void MoveHead(void){
Curr = Head;
}
void MoveNext(void) {
if (Curr->Next != NULL) {
Curr = Curr->Next;
}
}
int main()
{ int n,znach;
printf("Vvedite poj. razmer spiska : ");scanf("%d",&n);
printf("Teper vvodite poj. elementy spiska : ");
for (int i=0;i<n;i++){
scanf("%d",&znach);
Add(znach);
}
Print();
MoveHead();
for (int i=0;i<n;i++){
MoveNext();
if (i % 2 == 0){ Del(); }
}
printf("\n");
Print();
return 0;
}Решение задачи: «Удалить из списка элементы с чётными номерами»
textual
Листинг программы
#include <stdio.h>
/*...*/
Element *Head = NULL,
*Curr = NULL;
/*...*/
void Print(void)
{
while(Head){
Curr=Head;
Head=Head->Next;
printf("%d ",Curr->Val);
}
}
Объяснение кода листинга программы
В данном коде представлена реализация односвязного списка, в котором каждый элемент имеет свой уникальный номер. Постановка задачи заключается в удалении из списка элементов с чётными номерами. В начале кода объявлены две переменные: Head и Curr. Первая из них указывает на начало списка (первый элемент), вторая — на текущий элемент (который мы рассматриваем в данный момент). Изначально обе переменные равны NULL, что означает, что список пуст. Далее определена функция Print, которая выводит на экран все элементы списка. Её реализация выглядит следующим образом:
- Переменная Curr получает значение переменной Head.
- Значение переменной Head обновляется, и она указывает на следующий элемент списка.
- В цикле while, пока список не пуст, выполняются следующие действия:
- Значение переменной Curr обновляется, и она указывает на текущий элемент.
- Значение переменной Head обновляется, и она указывает на следующий элемент.
- Через функцию printf выводится на экран значение переменной Curr (текущий элемент).
- После выхода из цикла все элементы списка были выведены на экран. Чтобы реализовать удаление элементов с чётными номерами, необходимо добавить условное выражение в цикл while. Если номер текущего элемента (Curr->Val) является чётным числом, то его нужно удалить из списка. Для этого можно использовать другой цикл while, который будет проходить по всем элементам списка и обновлять ссылку на следующий элемент списка, пропуская при этом элементы с чётными номерами.