Модифицировать код так, чтобы новые цифры добавлялись не в начале а в конце - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет всем, я новенький на форуме и в освоении "С". У меня следующая проблема:
#include <stdio.h>
#include <stdlib.h>
 
struct Knoten {
       int Inhalt;
       struct Knoten *next;
};
 
struct Knoten *create_Liste(struct Knoten *p);
void print_Liste(struct Knoten *);
 
int main(int argc, char *argv[])
{
  struct Knoten *head;
  head = create_Liste(head);
  print_Liste(head);
  
  system("PAUSE");    
  return 0;
}
 
struct Knoten *create_Liste(struct Knoten *p) {
       int Zahl;
       struct Knoten *Neu;
       printf("\nErste Zahl eingeben: ");
       scanf("%d", &Zahl); 
       Neu = malloc(sizeof(struct Knoten));
       Neu->Inhalt = Zahl;
       Neu->next = NULL;
       p=Neu;
       
       while(Zahl!=0) {
              printf("\nWeitere Zahl eingeben: ");
              scanf("%d", &Zahl);
              Neu = malloc(sizeof(struct Knoten));
              Neu->Inhalt= Zahl;
              Neu->next=p;
              p=Neu;
       }
       return p;
}
 
void print_Liste(struct Knoten *p) {
     printf("\n");
     while(p!=NULL) {
              printf(" -> %d", p->Inhalt);
              p=p->next;
     }
     printf("\n\n");
}
В этом коде функция create_Liste добавляет новые цифры (Knoten) в начало страницы. Я должен модифицировать её так, чтобы новые цифры добавлялись не в начале а в конце. ПС: может мне кто помочь в написании функции, которая бы проверяла есть ли уже в списке введённое число, и если да то удаляла бы его? Я заранее благодарю всех откликнувшихся.

Решение задачи: «Модифицировать код так, чтобы новые цифры добавлялись не в начале а в конце»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
 
struct Number {// Каркас списка.содержит число и указатель на следующий элемент
    int number;
    Number * next;
};
struct NumberList { // Оболочка для списка.содержит указатель на 
                                 //первый элемент и число элементов в списке. 
    Number * list; // указатель на первый элемент.CreateList установит его в ноль
    int n;// feuer frei! // и его тоже
};
void CreateList(NumberList* numberList); // Liste zu gemachen ^<br>^ jaja
 
void AddNumber(NumberList * numberList,int n);// eine neue knote hinzusetzen 
void PrintList(NumberList * numberList);// der liste zu printen...
 
void main() {
    NumberList list;
    CreateList(&list);
    AddNumber(&list,1);
    AddNumber(&list,3);
    AddNumber(&list,5);
    PrintList(&list);
    while(!kbhit());
};
void CreateList(NumberList * numberList) {
    numberList->list=NULL;//// ставим нолик
    numberList->n=0;// 0_0
};
void AddNumber(NumberList * numberList,int n) {
    if(numberList->n==0) {//если список пуст
        numberList->list = new Number;// создаем первый элемент
        numberList->list->number=n;//устанавливаем нужное число
        numberList->list->next=NULL;//а указатель на следующий за ним - ноль!
        numberList->n++;// 
        return;
    };//если же список не пуст
    Number * l=numberList->list;//создадим переменную,которая его пробежит до конца
    while(l->next!=NULL)l=l->next;//пока у l есть следующий - бежим по списку.
    l->next = new Number; // когда нашли последний элемент - выделяем память
                                    // под следующий за ним
    l->next->number=n;// устанавливаем нужное значение
    l->next->next=NULL;//указатель на следующий за новым последним - ноль
    n++;
};
void PrintList(NumberList * numberList ) {//печатать будем?печатать будем
    Number * l = numberList->list;// создадим переменную которая пробежит список
    while(l!=NULL) { // если этот указатель указывает на существующий элемент
        printf("%d ",l->number);//то можно его распечатать
        l=l->next;// и перейти к следующему
        /// noch ein mal
    };
 
};

Объяснение кода листинга программы

  1. В начале кода определяются две структуры: Number и NumberList.
  2. Структура Number представляет собой отдельное число в списке и содержит поля number (число) и next (указатель на следующий элемент).
  3. Структура NumberList представляет собой весь список чисел и содержит поля list (указатель на первый элемент списка) и n (количество элементов в списке).
  4. Функция CreateList инициализирует список, устанавливая указатель на первый элемент в ноль и количество элементов в ноль.
  5. Функция AddNumber добавляет новое число в список. Если список пуст, она создает первый элемент. Если список не пуст, она находит последний элемент и добавляет новый элемент после него.
  6. Функция PrintList проходит по всем элементам списка и печатает каждое число.
  7. В функции main создается экземпляр списка, и в него добавляются числа 1, 3 и 5.
  8. Затем вызывается функция PrintList для печати списка.
  9. В конце программы выполняется инструкция while(!kbhit()), которая ожидает нажатия клавиши, чтобы программа могла завершиться.

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


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

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

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