Стек на основе односвязного списка - C (СИ)
Формулировка задачи:
Ребят, помогите пожалуйста! Ошибка в функции push. Только я не знаю как ее исправить. Я в отчаянии
stack.h
stack.c
main.c
Листинг программы
- typedef struct GRAD {
- int numb, year, numgrad, rec;
- struct GRAD *next;
- } GRAD;
- void push(GRAD **head, int numb1, int year1, int numgrad1, int rec1);
- void pop(GRAD **head);
- void view(GRAD **head);
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include "stack.h"
- void push(GRAD **head, int numb1, int year1, int numgrad1, int rec1)
- {
- GRAD *t= (GRAD *)malloc(sizeof (GRAD));
- t->numb=numb1;
- t->numgrad=numgrad1;
- t->rec=rec1;
- t->year=year1;
- t->next= (*head);
- (*head)=t;
- }
- void pop(GRAD **head)
- {
- GRAD *prev=NULL;
- int numb1, year1, numgrad1, rec1;
- if (head!=NULL)
- {
- prev=(*head);
- numb1=prev->numb;
- year1=prev->year;
- numgrad1=prev->numgrad;
- rec1=prev->rec;
- printf ("\n\n\n\nThe deleted element of the stack is:\nThe number of the school: %d\nThe number of release year: %d\nThe number of graduates: %d\nThe number of new entrants to higher education: %d\n", numb1, year1, numgrad1, rec1);
- (*head)=(*head)->next;
- }
- else
- printf ("The stack is empty!");
- free(prev);
- }
- void view(GRAD **head)
- {
- GRAD *q;
- if (head!=NULL)
- {
- for (q=head; q!=NULL; q=(*q).next)
- printf ("The number of the school: %d\nThe number of release year: %d\nThe number of graduates: %d\nThe number of new entrants to higher education: %d\n\n\n\n\n\n", (*q).numb, (*q).year, (*q).numgrad, (*q).rec);
- }
- else
- printf ("The stack is empty!\n");
- free(q);
- }
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include "stack.h"
- int main (int argc, char* argv[])
- {
- int x=0, c=0, numb1=0, year1=0, numgrad1=0, rec1=0;
- GRAD *head=NULL;
- do{
- printf ("Menu:\n1. Push. Add items.\n2. Pop. Retrieving items.\n3. View. View the stack.\n");
- printf ("Choose what interests you\n");
- scanf ("%d", &x);
- switch (x)
- {
- case 1: {
- printf ("Enter information about the graduates:\n");
- printf ("Enter the number of the school:\n");
- scanf ("%d", &numb1);
- printf ("Enter the number of release year:\n");
- scanf ("%d", &year1);
- printf ("Enter the number of graduates:\n");
- scanf ("%d", &numgrad1);
- printf ("Enter the number of new entrants to higher education:\n");
- scanf ("%d", &rec1);
- push(head, numb1, year1, numgrad1, rec1);
- break;
- }
- case 2: pop(head); break;
- case 3: view(head); break;
- default: printf ("Error! Enter another number\n");
- }
- printf ("To continue? Yes=1, No=2\n");
- scanf ("%d", &c);
- }
- while (c==1);
- system("PAUSE");
- return 0;
- }
Решение задачи: «Стек на основе односвязного списка»
textual
Листинг программы
- push(&head,...);
- pop(&head);
- view(&head);
Объяснение кода листинга программы
- В функции main() создается переменная head типа struct Node* и инициализируется как NULL. Это указывает на то, что список пуст.
- В функции main() создается переменная node и инициализируется как NULL. Эта переменная используется в функции push() для создания нового узла.
- В функции push(&head,...) создается новый узел, и его адрес сохраняется в переменной node.
- В функции push(&head,...) адрес нового узла добавляется в начало списка, путем изменения значения переменной head на адрес нового узла.
- В функции main() вызывается функция push(&head,...), чтобы добавить элемент в список.
- В функции main() вызывается функция pop(&head), чтобы удалить последний добавленный элемент из списка.
- В функции pop(&head) происходит проверка, не является ли список пустым. Если это так, то программа завершается с сообщением об ошибке.
- В функции pop(&head) адрес последнего узла списка сохраняется в переменной node.
- В функции pop(&head) узел, на который указывает переменная node, удаляется из списка, путем изменения значения переменной head на следующий узел.
- В функции main() вызывается функция view(&head), чтобы отобразить содержимое списка.
- В функции view(&head) происходит итерация по списку, начиная с головы, и для каждого узла выводится его содержимое.
- В функции view(&head) после обхода всех узлов списка программа завершается.
- Код не содержит функций для вставки элемента в середину списка или для удаления определенного элемента из списка.
- Код не содержит функций для доступа к определенному элементу списка по индексу.
- Код не содержит функций для изменения значения элемента списка.
- Код не содержит функций для проверки на пустоту списка или для проверки на уникальность элементов списка.
- Код не содержит функций для поиска определенного элемента в списке.
- Код не содержит функций для разделения списка на подсписки или для объединения двух списков.
- Код не содержит функций для изменения порядка элементов в списке.
- Код не содержит функций для копирования списка или для освобождения памяти, занятой списком.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д