1.顺序栈
网络异常,图片无法展示
|
1.1顺序栈的定义
#define MaxSize 10 //定义栈中元素的最大个数 typedef struct{ ElemType data[MaxSize]; //静态数组存放栈中的元素 int top; //栈顶指针 }SqStack; //结构体重命名
声明一个顺序栈后就会在内存中分配一整片连续的空间,其中内存大小为:MaxSize*sizeof(ELemType)
void testStack(){ SqStack S; //声明一个顺序栈 }
1.2栈的初始化操作
由于栈顶指针top需要指向此时栈顶元素,所以让top指向0是不合理的,可以初始化让top指向-1;判断一个栈是否为空,即判断S.top是否等于-1
初始化栈:
void Inittack(SqStack){ SqStack S; //声明一个顺序栈 S.top=-1; }
判断栈空:
bool StackEmpty(SqStack S){ if(S.top==-1) //栈空 return true; else return false; //非空 }
1.3进栈操作
分析:
- 判断栈是否为空
- 栈顶指针+1
- 新元素入栈
bool Push(SqStack &S,ElemType x){ if(S.top==NaxSize-1) return false; S.top+=1; S.data[S.top]=x; return true; }
1.4出栈操作
bool Push(SqStack &S,ElemType &x){ if(S.top==-1) return false; x=S.data[S.top--]; return true; }
1.5读栈顶元素操作
bool GetTop(SqStack &S,ElemType &x){ if(S.top==-1) return false; x=S.data[S.top]; return true; }
2.共享栈
两个栈共享同一片空间
#define MaxSize 10 //定义栈中元素的最大个数 typedef struct{ ElemType data[MaxSize]; //静态数组存放栈中的元素 int top0; //0号栈栈顶指针 int top1; //1号栈栈顶指针 }SqStack; //结构体重命名
初始化栈:
void InitStack(ShStack &S){ S.top0=-1; S.top1=MaxSize; }
3.链栈的定义
- 进栈/出栈都只能在栈顶一段进行
- 链头作为栈顶
typedef struct Linknode{ ElemType data; //数据域 struct Linknode *next; //指针域 }*LiStack //栈类型定义