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