赞
踩
名词解释:
- #define MaxSize 50
- typedef struct{
- ElemType data[MaxSize];
- int top;
- }Stack;
- void InitStack(Stack &S){
- S.top=-1;
- }
- #define true 1
- #define false 0
-
- bool EmptyStack(Stack S){
- if(S.top==-1) return true;
- else return false;
- }
首先,判断是否栈满。如栈满,则退出程序。若未满,则先让top指针加一,在进行入栈操作。
- bool Push(Stack &S,ElemType e){
- if(S.top==MaxSize-1) return false; //栈满?
- S.data[++S.top]=e;
- return true;
- }
首先,判断是否栈空。若空,则退出程序。反之,则让e等于出栈元素,再让top指针减1。
- bool Pop(Stack &S,ElemType &e){
- if(S.top==-1) return false; #判栈空
- e=S.data[S.top--];
- return true;
- }
- bool GetTop(Stack S,ElemType &e){
- if(S.top==-1) return false; //判栈空
- e=S.data[S.top];
- return true;
- }
读栈顶元素与出栈类似,只是读并没有将元素出栈。
注意:
在本节定义中,栈的初始化是将S.top初始为-1。但是,S.top也可以初始为0。
当初始化S.top==0时,
进栈操作的代码:S.data[++S.top]=e;
应改为:S.data[S.top++]=e;
出栈操作的代码:e=S.data[S.top--];
应该为:e=S.data[--S.top];
- #define MaxSize 50
-
- typedef struct{
- ElemType data[MaxSize];
- int top1=0;
- int top2=MaxSize-1;
- }ShareStack;
这里只拿进栈操作来实现,其余的可以自行动手练习。
- bool Pop(ShareStack &S,ElemType e){
- if((S.top1+1)==S.top2) return false; #栈满?
- S.data[S.top1++]=e;
- return true;
- }
- bool Pop(ShareStack &S,ElemType e){
- if((S.top1+1)==S.top2) return false; #栈满?
- S.data[S.top2--]=e;
- return true;
- }
栈的链式存储称为链栈,采用单链表的头插法(不包含头结点),head指向栈顶结点。
- typedef struct LNode{
- ElemType *data;
- struct LNode *next;
- }LNode,*LStack;
- bool Pop(LStack &S,ElemType e){
- LNode *p=(LNode*)malloc(sizeof(LNode));
- if(S==NULL){
- S=p;
- p->next=NULL
- }
- else{
- p->next=S->next;
- S->next=p;
- }
- return true;
- }
- bool Push(LStack &S,ElemType &e){
- if(S==NULL) return false;
- if(S->next==NULL){
- e=S->data;
- S->next=NULL;
- }
- else{
- e=S->data;
- S->next=S->next->next;
- }
- return true;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。