31栈(堆栈) int symmetry (Elem Type strD int i; ElemType e, sqstack *st InitStack(st): for(i=0; str[:=0; i++) 栈st Pushes strid Maxsize-1 for(i-ostri:=\0;i++) i Pop(st, e); 1“b if(strip=e return(0) return(1) e=t0p→-1 ElemType strl={b’,e,c',"b’,"0 16
16 int symmetry(ElemType str[]) { int i;ElemType e; SqStack *st; InitStack(st); for(i=0;str[i]!='\0';i++) Push(st,str[i]); for(i=0;str[i]!='\0';i++) { Pop(st,e); if(str[i]!=e) return(0); } return(1); } top -1 0 1 2 MaxSize-1 … 栈st c b 1 ‘b’ c ElemType str[]={'b',‘c',‘c',‘b','\0'}; e= 3.1 栈(堆栈)
3.1栈(堆栈) 主函数调用上述算法 int main (int argc, char* argyI Elem Type str[l={b’,c',e,b’,"0” if(symmetry(str) cout<<"是对称字符串!"<<end eise cout<<"非对称字符串!"<<end return o 7
17 int main(int argc, char* argv[]) { ElemType str[]={'b',‘c',‘c',‘b','\0'}; if(symmetry(str)) cout<<"是对称字符串!"<<endl; else cout<<"非对称字符串!"<<endl; return 0; } 主函数调用上述算法 3.1 栈(堆栈)
3.1栈(堆栈) 3.13栈的链式存储结构及其基本运算的实现 链栈示意图 栈顶结点 头结点 b Head→ a∧栈底结点 He> nextNULLL表听找为空且只要 内存足够链找的长度不受跟制
18 3.1 栈(堆栈) 3.1.3 栈的链式存储结构及其基本运算的实现 Head ‘a’ ∧ ‘b’ ‘c’ 头结点 栈顶结点 栈底结点 链栈示意图 若Head->next=NULL表明栈为空,且只要 内存足够,链栈的长度不受限制
3.1栈(堆栈) 3.13栈的链式存储结构及其基本运算的实现 链栈的存储结构描述 链找的类型说明如下 typedef char ElemType; typedef struct linknode ElemType data; struct linknode * next; BLiStack 19
19 3.1 栈(堆栈) 3.1.3 栈的链式存储结构及其基本运算的实现 typedef char ElemType; typedef struct linknode { ElemType data; struct linknode *next; }LiStack; 一. 链栈的存储结构描述 链栈的类型说明如下:
3.1栈(堆栈) 进栈函数Push(s,e)的实现 设凋用语句为Push(say void Push liStack*&s, Elem Type e S是表示一个带(结点的链“b LiStack x p=LiStack *)malloc(sizeof(lliStack); p->data=e p-nexts->next, s->next=;I b p a’∧ 0
20 3.1 栈(堆栈) void Push(LiStack *&s,ElemType e) {/*S是表示一个带头结点的链栈*/ LiStack *p; p=(LiStack *)malloc(sizeof(LiStack)); p->data=e; p->next=s->next; s->next=p; } s ∧ p ‘a’ 调用语句为 Push(s,‘a’) s ‘a’ ∧ p ‘b’ ‘c’b’ p ‘c’ 设 进栈函数Push(s,e)的实现