MIPI_BaseC_WebinarFRTK/13_Lecture13/02_lifo_1_p14.c
2024-11-13 09:22:28 +03:00

44 lines
918 B
C

// Пример организации стека как однонаправленного списка
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct list {
datatype value;
struct list * next;
}stack;
void push(stack **p,datatype data)
{
stack *ptmp;
ptmp=malloc(sizeof(stack));
ptmp->value=data;
ptmp->next=*p;
*p=ptmp;
}
_Bool empty_stack(stack *p) {
return p==NULL;
}
datatype pop(stack **p){
stack *ptmp=*p;
datatype c;
if(empty_stack(*p))
exit (1); // Попытка взять из пустого стека
c=ptmp->value;
*p=ptmp->next;
free(ptmp);
return c;
}
int main(){
stack *p=NULL; // Важно для корректной работы присвоить NULL
for(int i=1;i<=5; i++)
push(&p,i);
for(int i=1;i<=5; i++)
printf("%d\n",pop(&p)); // 5 4 3 2 1
return 0;
}