Стек на основе односвязного списка - 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) после обхода всех узлов списка программа завершается.
- Код не содержит функций для вставки элемента в середину списка или для удаления определенного элемента из списка.
- Код не содержит функций для доступа к определенному элементу списка по индексу.
- Код не содержит функций для изменения значения элемента списка.
- Код не содержит функций для проверки на пустоту списка или для проверки на уникальность элементов списка.
- Код не содержит функций для поиска определенного элемента в списке.
- Код не содержит функций для разделения списка на подсписки или для объединения двух списков.
- Код не содержит функций для изменения порядка элементов в списке.
- Код не содержит функций для копирования списка или для освобождения памяти, занятой списком.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д