顺序栈
顺序栈
-
顺序栈的定义
#define MaxSize 10//定义栈中元素的最大个数 typedef struct{ ElemType data[MaxSize];//静态数组存放栈中元素 int top;//站顶指针 }SqStack; void testStack(){ SqStack S;//声明一个顺序栈(分配空间) //...... }
-
顺序表的初始化操作
#define MaxSize 10//定义栈中元素的最大个数 typedef struct{ ElemType data[MaxSize];//静态数组存放栈中元素 int top;//站顶指针 }SqStack; //初始化栈 void InitStack(SqStack &S){ S.top = -1;//初始化栈顶指针 } //判断栈空 bool StackEmpty(SqStack S){ if(S.top == -1) //栈空 return true; else //不空 return false; } void testStack(){ SqStack S;//声明一个顺序栈(分配空间) //...... }
-
进栈操作
#define MaxSize 10//定义栈中元素的最大个数 typedef struct{ ElemType data[MaxSize];//静态数组存放栈中元素 int top;//站顶指针 }SqStack; //新元素入栈 bool Push(SqStack &S, ElemType x){ if(S.top == MaxSize-1)//栈满,报错 return false; S.top = S.top + 1;//指针先加一 S.data[S.data] = x;//新元素入栈 return true; } //其中 S.top = S.top + 1;//指针先加一 S.data[S.data] = x;//新元素入栈 //也可以替换为一句代码 S.data[++S.top] = x;//top先加一,后进行赋值 //注意,不能和一下搞混,下面是错误写法 S.data[S.top++] = x; //这样写等价于 S.data[S.top] = x; S.top = S.top + 1;//先进行赋值,后top在加一
-
出栈操作
#define MaxSize 10//定义栈中元素的最大个数 typedef struct{ ElemType data[MaxSize];//静态数组存放栈中元素 int top;//站顶指针 }SqStack; //出栈操作 bool Pop(SqStack &S, ElemType &x){ if(S.top == -1) //栈空,报错 return false; x = S.data[S.top]; S.top = S.top - 1; return true; } //同样,其中的两句 x = S.data[S.top]; S.top = S.top - 1; //可以写成 x = S.data[S.top--]; //写成x = S.data[--S.top];就错了
-
读栈顶元素
#define MaxSize 10//定义栈中元素的最大个数 typedef struct{ ElemType data[MaxSize];//静态数组存放栈中元素 int top;//栈顶指针:指向此时的栈顶元素 }SqStack; //读栈顶元素 bool Pop(SqStack S, ElemType &x){ if(S.top == -1) //栈空,报错 return false; x = S.data[S.top]; return true; }
-
共享栈
#define MaxSize 10 typedef struct{ ElemType data[MaxSize]; int top0; int top1; }ShStack; //初始化栈 void InitStack(ShStack &S){ S.top0 = -1; S.top1 = MaxSize; } //栈满条件 top0 + 1 == top1 //top1 - 1 = top0