Модифицировать код так, чтобы новые цифры добавлялись не в начале а в конце - 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()), которая ожидает нажатия клавиши, чтобы программа могла завершиться.