链栈——课上练

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 /*此处是链栈数据结构定义*/
  5 typedef int DataType;
  6 struct node 
  7 {
  8   DataType  info;
  9   struct node  *link;
 10 };
 11 
 12 typedef struct node *PNode;
 13 
 14 struct LinkStack {
 15    PNode  top;
 16 };
 17 typedef struct LinkStack *PLinkStack;
 18 
 19 
 20 //第一关
 21 PLinkStack createNullStack_link( )
 22 {//此处填写代码,创建一个空的链栈 
 23  PLinkStack head;
 24  /*PNode nul;
 25  nul=(PNode)malloc(sizeof(struct node));
 26  nul->link=NULL;*/
 27  head=(PLinkStack)malloc(sizeof(struct LinkStack));
 28  head->top=(PNode)malloc(sizeof(struct node));
 29  if(head!=NULL){
 30      head->top=NULL;
 31  }
 32  return head;
 33 }
 34 
 35 //第二关
 36 int isNullStack_link(PLinkStack L)
 37 {
 38   //判断栈是否为空,若为空,返回值为1,否则返回值为0,若栈不存在,则返回-1
 39 if(L==NULL){
 40     return -1;
 41 }
 42 if(L->top==NULL){
 43     return 1;
 44 
 45 }
 46 return 0;
 47 }
 48 
 49 
 50 
 51 
 52 //第三关
 53 int push_link(PLinkStack L ,DataType x)
 54 {//在栈中插入数据元素x,若插入不成功,返回0;插入成功返回值为1
 55     if(L==NULL){
 56         return 0;
 57     }
 58     PNode p = (PNode)malloc(sizeof(struct node));
 59     if(p==NULL){
 60         return;
 61     }
 62 
 63     p->info=x;
 64     p->link=L->top;
 65     L->top=p;
 66     return 1;
 67     
 68 }
 69  
 70 
 71 
 72 //第四关
 73 DataType pop_link(PLinkStack L)
 74 {//弹栈并返回删除元素,若栈为空,则返回-1
 75     if(L==NULL){
 76         return;
 77     }
 78     if(L->top==NULL){
 79         return -1;
 80     }
 81     PNode p=L->top;
 82     DataType ans=p->info;
 83    // ans=L->top->info;
 84     L->top=L->top->link;
 85     free(p);
 86     return ans;
 87 }
 88 
 89 //第五关
 90 DataType top_link(PLinkStack L)
 91 {// 取栈顶元素返回,若栈为空,则返回-1
 92      if(L==NULL){
 93         return;
 94     }
 95     if(L->top==NULL){
 96         return -1;
 97     }
 98     return L->top->info;
 99 }
100 
101 
102 //销毁栈,释放栈所占存储空间
103 int destroystack_link(PLinkStack L)
104 {
105     //返回值为销毁的栈中现有数据元素的个数,若待销毁的线性表不存在,则返回0
106     int cnt =0 ;
107     if(L==NULL) return 0;
108     struct node *p = L->top ,*q ;
109     free(L);
110     while(p->link!=NULL)
111     {
112        q = p->link;
113        cnt++;
114        free(p);
115        p = q ;
116     }
117     return cnt ;
118 }
119 
120 //第六关
121 
122 int  balance_symbol(char *s)
123 {//在此处填写代码完成符号配对判断,若配对,返回值为1,否则返回值为0
124   PNode stack= createNullStack_link();
125     if(stack==NULL){
126         return 0;
127     }
128     int cnt=0;
129     while(s[cnt]!='\0'){
130         if(s[cnt]=='('||s[cnt]=='['||s[cnt]=='{'){
131             push_link(stack,s[cnt]);
132         }
133         if(s[cnt]==')'||s[cnt]==']'||s[cnt]=='}'){
134             if(abs(s[cnt]-top_link(stack))==1||abs(s[cnt]-top_link(stack))==2){
135 
136             if(!isNullStack_link(stack)){
137 
138                 pop_link(stack);
139             }
140             }
141         }
142         cnt++;
143     }
144     if(isNullStack_link(stack)){
145         return 1;
146     }
147     return 0;
148 }
View Code

 

posted @ 2020-10-16 12:46  ethon-wang  阅读(507)  评论(0编辑  收藏  举报