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

  1. Переменная Curr получает значение переменной Head.
  2. Значение переменной Head обновляется, и она указывает на следующий элемент списка.
  3. В цикле while, пока список не пуст, выполняются следующие действия:
    • Значение переменной Curr обновляется, и она указывает на текущий элемент.
    • Значение переменной Head обновляется, и она указывает на следующий элемент.
    • Через функцию printf выводится на экран значение переменной Curr (текущий элемент).
  4. После выхода из цикла все элементы списка были выведены на экран. Чтобы реализовать удаление элементов с чётными номерами, необходимо добавить условное выражение в цикл while. Если номер текущего элемента (Curr->Val) является чётным числом, то его нужно удалить из списка. Для этого можно использовать другой цикл while, который будет проходить по всем элементам списка и обновлять ссылку на следующий элемент списка, пропуская при этом элементы с чётными номерами.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы