2023-03-30-链栈LinkStack的实现

发布时间 2023-03-30 21:18:07作者: 正方形的被子
 1 #include <stdio.h>
 2 #include <malloc.h>
 3 
 4 typedef struct SNode
 5 {
 6     int data;
 7     struct SNode *next;
 8 }SNode,*LinkStack;
 9 //栈的主要操作是在栈顶进行插入和删除,所以将链表的头部看为栈顶最合适
10 void initLinkStack(LinkStack S)//初始化
11 {
12     S=NULL;
13 }
14 
15 LinkStack Push(LinkStack S,int value)//入栈操作
16 {
17     SNode *p;
18     p=(SNode *)malloc(sizeof(SNode));
19     p->next=S;
20     p->data=value;
21     S=p;
22     return S;
23 }
24 
25 LinkStack Pop(LinkStack S,int *e)//出栈操作
26 {
27     if(S==NULL)
28     {
29         return 0;
30     }
31     else
32     {
33         *e=S->data;
34         SNode *q;//存储删除的节点来进行释放
35         q=S;
36         S=S->next;
37         free(q);
38         return S;//由于对头指针变量进行了更改,所以需要返回头指针S
39     }
40     
41 }
42 
43 int GetTop(LinkStack S)//获取栈顶元素
44 {
45     if(S!=NULL)
46     {
47         return S->data;
48     }
49 }
50 
51 int main()
52 {
53     LinkStack S;
54     S=Push(S,666);
55     S=Push(S,999);
56 
57     
58     int *e;
59     int a=0;
60     e=&a;//指针初始化
61 
62     S=Pop(S,e);
63     printf("%d",GetTop(S));
64     return 0;
65 }