链式栈的基本操作

  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  

 

posted on 2019-06-06 12:44  18软工五班龙向昆  阅读(528)  评论(0编辑  收藏  举报

导航