Удалить из списка элементы с чётными номерами - 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, который будет проходить по всем элементам списка и обновлять ссылку на следующий элемент списка, пропуская при этом элементы с чётными номерами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д