栈、队列的应用
栈定义与基本操作的实现
写代码:定义顺序存储的栈(数组实现),数据元素是int型
//[1]自定义变量部分
#define MaxSize 150 //定义栈中元素的最大个数
//[2]顺序栈的数据结构
typedef int Elemtype;
typedef struct SqStack
{
Elemtype data[MaxSize]; //存放栈中元素
int top; //栈顶指针,指向栈顶位置
}SqStack; //顺序栈的简写
写代码:基于上述定义,实现“判空、判满、入栈、出栈”四个基本操作
顺序栈的判空操作:
bool StackEmpty(SqStack S)
{
if(S.top == -1)
return true; //栈空
else
return false; //栈不空
}
顺序栈的判满操作:
bool StackFull(SqStack S){
if(S.top == MaxSize - 1)
return true; //栈满
else
return false; //栈不满
}
顺序栈的入栈操作:
bool Push(SqStack &S,Elemtype e)
{
if(S.top == MaxSize - 1) //栈满,报错
return false;
S.data[++S.top] = e; //指针先加1,再入栈 //S.top++; (将栈顶指针后移)
return true; //S.data[S.top] = e;(插入元素)
}
顺序栈的出栈操作:
bool Pop(SqStack &S,Elemtype &e)
{
if(S.top == -1)
return false; //栈空,报错
e = S.data[S.top--];//先出栈,指针再减1 //e = S.data[S.top];(e记录栈顶元素)
return true; //S.top--; (将栈顶指针前移)
}
写代码:定义链式存储的栈(单链表(头插法)实现)
typedef int Elemtype;
typedef struct StackNode
{
E