Стек на основе односвязного списка - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Ребят, помогите пожалуйста! Ошибка в функции push. Только я не знаю как ее исправить. Я в отчаянии stack.h
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);
stack.c
#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);
}
main.c
#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);

Объяснение кода листинга программы

  1. В функции main() создается переменная head типа struct Node* и инициализируется как NULL. Это указывает на то, что список пуст.
  2. В функции main() создается переменная node и инициализируется как NULL. Эта переменная используется в функции push() для создания нового узла.
  3. В функции push(&head,...) создается новый узел, и его адрес сохраняется в переменной node.
  4. В функции push(&head,...) адрес нового узла добавляется в начало списка, путем изменения значения переменной head на адрес нового узла.
  5. В функции main() вызывается функция push(&head,...), чтобы добавить элемент в список.
  6. В функции main() вызывается функция pop(&head), чтобы удалить последний добавленный элемент из списка.
  7. В функции pop(&head) происходит проверка, не является ли список пустым. Если это так, то программа завершается с сообщением об ошибке.
  8. В функции pop(&head) адрес последнего узла списка сохраняется в переменной node.
  9. В функции pop(&head) узел, на который указывает переменная node, удаляется из списка, путем изменения значения переменной head на следующий узел.
  10. В функции main() вызывается функция view(&head), чтобы отобразить содержимое списка.
  11. В функции view(&head) происходит итерация по списку, начиная с головы, и для каждого узла выводится его содержимое.
  12. В функции view(&head) после обхода всех узлов списка программа завершается.
  13. Код не содержит функций для вставки элемента в середину списка или для удаления определенного элемента из списка.
  14. Код не содержит функций для доступа к определенному элементу списка по индексу.
  15. Код не содержит функций для изменения значения элемента списка.
  16. Код не содержит функций для проверки на пустоту списка или для проверки на уникальность элементов списка.
  17. Код не содержит функций для поиска определенного элемента в списке.
  18. Код не содержит функций для разделения списка на подсписки или для объединения двух списков.
  19. Код не содержит функций для изменения порядка элементов в списке.
  20. Код не содержит функций для копирования списка или для освобождения памяти, занятой списком.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы