1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 typedef int ElemType;
5 /*链栈结点*/
6 typedef struct Node{
7 ElemType data;
8 struct Node *next;
9 }LinkStackNode;
10 /*链栈结构*/
11 typedef struct{
12 LinkStackNode *top;
13 int length;
14 }LinkStack;
15 //初始化链式栈
16 void InitStack(LinkStack *S){
17 S->top=NULL;
18 S->length=0;
19 printf("初始化成功\n");
20 }
21 //入栈
22 int Push(LinkStack *S){
23 int n;
24 LinkStackNode *x=(LinkStackNode*)malloc(sizeof(LinkStackNode));
25 if(x==NULL){
26 return printf("申请空间失败\n");
27 }
28 printf("请输入你想入栈的数\n");
29 scanf("%d",&n);
30 x->data=n;
31 x->next=S->top;//插入一个新结点在头部
32 S->top=x;//将头结点指针指向该结点
33 S->length++;
34 return printf("入栈成功\n");
35 }
36 //出栈
37 int Pop(LinkStack *S){
38 if(S->top==NULL){
39 return printf("栈内以空\n");
40 }
41 int x;
42 LinkStackNode *temp=S->top;//将temp指针指向头结点;
43 //移动栈顶指针
44 S->top=temp->next;//将头结点指针指向temp指针的下一位
45 S->length--;
46 x=temp->data;
47 free(temp); //释放temp
48 printf("出栈成功\n");
49 printf("出栈的值为%d",x);
50 }
51 //获取栈顶
52 int GetTop(LinkStack *S){
53 LinkStackNode *p=S->top;
54 if(S->top==NULL){
55 return printf("栈内暂无元素\n");
56 }
57 return printf("栈顶的数为%d\n",S->top->data);
58 }
59 //求栈的长度
60 int GetLength(LinkStack *S){
61 int n=1;
62 LinkStackNode *p=S->top;
63 while(p->next!=NULL){
64 p=p->next;
65 n++;
66 }
67 return printf("栈长度为%d\n",n);
68 }
69 int main(){
70 LinkStack S;
71 int x;
72 InitStack(&S);
73 while(true){
74 printf("|||||||||||||||||||||||||||||||||||||||||||||||\n");
75 printf("|| 1:入栈 ||\n");
76 printf("|| 2:出栈 ||\n");
77 printf("|| 3:查看栈顶元素 ||\n");
78 printf("|| 4:查看栈长度 ||\n");
79 printf("|| (输入-1退出系统) ||\n");
80 printf("|||||||||||||||||||||||||||||||||||||||||||||||\n");
81 int n;
82 printf("请输入操作序号:\n");
83 scanf("%d",&n);
84 switch(n){
85 case 1 :
86 Push(&S);
87 break;
88 case 2 :
89 // Pop(&S,&x);
90 // printf("出栈的值为%d\n",x);
91 Pop(&S);
92 break;
93 case 3 :
94 GetTop(&S);
95 break;
96 case 4 :
97 GetLength(&S);
98 break;
99 case -1:
100 return 0;
101
102 }
103 }
104 }
105