Модифицировать код так, чтобы новые цифры добавлялись не в начале а в конце - C (СИ)
Формулировка задачи:
Привет всем, я новенький на форуме и в освоении "С".
У меня следующая проблема:
В этом коде функция create_Liste добавляет новые цифры (Knoten) в начало страницы.
Я должен модифицировать её так, чтобы новые цифры добавлялись не в начале а в конце.
ПС: может мне кто помочь в написании функции, которая бы проверяла есть ли уже в списке введённое
число, и если да то удаляла бы его?
Я заранее благодарю всех откликнувшихся.
#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"); }
Решение задачи: «Модифицировать код так, чтобы новые цифры добавлялись не в начале а в конце»
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 }; };
Объяснение кода листинга программы
- В начале кода определяются две структуры:
Number
иNumberList
. - Структура
Number
представляет собой отдельное число в списке и содержит поляnumber
(число) иnext
(указатель на следующий элемент). - Структура
NumberList
представляет собой весь список чисел и содержит поляlist
(указатель на первый элемент списка) иn
(количество элементов в списке). - Функция
CreateList
инициализирует список, устанавливая указатель на первый элемент в ноль и количество элементов в ноль. - Функция
AddNumber
добавляет новое число в список. Если список пуст, она создает первый элемент. Если список не пуст, она находит последний элемент и добавляет новый элемент после него. - Функция
PrintList
проходит по всем элементам списка и печатает каждое число. - В функции
main
создается экземпляр списка, и в него добавляются числа 1, 3 и 5. - Затем вызывается функция
PrintList
для печати списка. - В конце программы выполняется инструкция
while(!kbhit())
, которая ожидает нажатия клавиши, чтобы программа могла завершиться.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д