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("初始化成功 "); 20 } 21 //入栈 22 int Push(LinkStack *S){ 23 int n; 24 LinkStackNode *x=(LinkStackNode*)malloc(sizeof(LinkStackNode)); 25 if(x==NULL){ 26 return printf("申请空间失败 "); 27 } 28 printf("请输入你想入栈的数 "); 29 scanf("%d",&n); 30 x->data=n; 31 x->next=S->top;//插入一个新结点在头部 32 S->top=x;//将头结点指针指向该结点 33 S->length++; 34 return printf("入栈成功 "); 35 } 36 //出栈 37 int Pop(LinkStack *S){ 38 if(S->top==NULL){ 39 return printf("栈内以空 "); 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("出栈成功 "); 49 printf("出栈的值为%d",x); 50 } 51 //获取栈顶 52 int GetTop(LinkStack *S){ 53 LinkStackNode *p=S->top; 54 if(S->top==NULL){ 55 return printf("栈内暂无元素 "); 56 } 57 return printf("栈顶的数为%d ",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); 68 } 69 int main(){ 70 LinkStack S; 71 int x; 72 InitStack(&S); 73 while(true){ 74 printf("||||||||||||||||||||||||||||||||||||||||||||||| "); 75 printf("|| 1:入栈 || "); 76 printf("|| 2:出栈 || "); 77 printf("|| 3:查看栈顶元素 || "); 78 printf("|| 4:查看栈长度 || "); 79 printf("|| (输入-1退出系统) || "); 80 printf("||||||||||||||||||||||||||||||||||||||||||||||| "); 81 int n; 82 printf("请输入操作序号: "); 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 ",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