栈是只允许一端进行插入或删除的线性表
基本操作
InitStack(&S)
:初始化栈
StackEmpty(S)
:判断栈是否为空,为空返回true,否则返回false
Push(&S,x)
:入栈,若栈未满则加入x使之成为新栈顶
Pop(&S,&x)
:出栈,若栈为空弹出栈顶元素并用x返回
GetTop(&x)
:读栈顶元素,若栈非空,用x返回
DestroyStack(&S)
:销毁栈,并释放占用的储存空间
顺序栈的定义
#define Maxsize 10 //定义栈中元素的最大个数
typedef struct{
Elemtype data[Maxsize]; //静态数组存放栈中元素
int top; //栈顶指针
}SqStack;
void InitStack(SqStack &S)
{
S.top = -1;
} //初始化栈
void TestStack()
{
SqStack S;
InitStack(S);
}
bool StackEmpty(SqStack S)
{
if(S.top == -1)
return true; //栈空
else return false; //不空
}//判断栈空
bool Push(SqStack &S,Elemtype x)
{
if(S.top == Maxsize - 1)
return false;
S.data[++S.top] == x;
return true;
} //进栈
bool Pop(SqStack &S,Elemtype &x)
{
if(S.top == -1)
return false;
x = S.data[S.top--];
return true;
} //出栈
bool GetTop(SqStack S,Elemtype &x)
{
if(S.top == -1)
return false;
x = S.data[S.top];
return true;
} //取得栈顶元素
以上情况是top指针指向栈顶元素,考试时要注意观察top指针指向的位置有可能是
栈顶元素的下一个位置 那么出栈和入栈分别是
x=S.data[--S.top];
S.data[S.top++]=x;