堆栈的顺序表示操作
堆栈是一种限定在同一端进行插入和删除操作的线性结构
允许执行插入和删除的这一 端称为栈顶(top),另一端为栈底
堆栈有两种存储结构,顺序栈和链式栈
以下为顺序栈的操作代码
#include <stdio.h>
#include <stdlib.h>
//堆栈的定义
typedef int ElemType;
typedef struct stack
{
int top;
int maxSize;
ElemType *element;
} Stack;
//堆栈的初始化
void Create(Stack *S,int mSize)
{
S->maxSize = mSize;
S->top = -1;
S->element = (ElemType *)malloc(sizeof(ElemType)*mSize);
}
int IsEmpty(Stack *S)
{
return S->top==-1;
}
int IsFull(Stack *S)
{
return S->top==S->maxSize-1;
}
//获取栈顶元素
int Top(Stack *S,ElemType *x)
{
if(IsEmpty(S))
return 0;
*x = S->element[S->top];
return 1;
}
//栈顶元素的插入
int Push(Stack *S,ElemType x)
{
if(IsFull(S))
return 0;
S->top++;
S->element[S->top]=x;
return 1;
}
//栈顶元素的删除
int Pop(Stack *S)
{
if(IsEmpty(S))
return 0;
S->top--;
return 1;
}
//清除堆栈元素
void Clear(Stack *S)
{
S->top=-1;
}
//顺序表的输出
int Output(Stack S)
{
if(S.top==-1)
return 0;
while(S.top>-1)
{
printf("%d ",S.element[S.top]);
S.top--;
}
printf("\n");
return 1;
}
//堆栈的撤销
void Destroy(Stack *S)
{
S->top = -1;
S->maxSize = 0;
free(S->element);
}
int main(void)
{
Stack s;
Create(&s,5);
Push(&s,1);
Push(&s,2);
Push(&s,3);
Output(s);
Push(&s,4);
Output(s);
Destroy(&s);
return 0;
}