堆栈的定义与应用
一 堆栈的顺式存储实现
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
1. 定义及存储结构
堆栈的顺式存储结构可以由一个数组和一个记录栈顶元素位置的变量组成
#define MaxSize <存放元素的最大个数>
typedef int ElemType;
typedef struct SNode *Stack
{ ElemType data[MaxSize]; //存放顺序表元素,还可以用指针来表示顺序表的基地址,这样的话可以允许扩展
//在本处代码中使用了基本数组data,不允许扩展
int top=-1; //表示栈顶的位置,其实就是顺序栈的长度
} ; //顺序表的类型
对于可扩展的顺序栈的定义如下
typedef int Position;
struct SNode {
ElementType *Data; /* 存储元素的数组 */
Position Top; /* 栈顶指针 */
int MaxSize; /* 堆栈最大容量 */
};
typedef struct SNode *Stack;//注意此处使用的是指针表示顺序表的基地址
2.相关操作
(1) 堆栈的初始化(此处用的是不可扩展的顺序栈)
void CreateList(Stack *&L,ElemType a[],int n)
//建立顺序表
{
L=(Stack *)malloc(sizeof(Stack));
for (int i=0;i<n;i++)
L->data[i]=a[i];
L->top=n-1;
}
(2)判断堆栈是否为空
bool IsEmpty(Stack S)
{
return(S->top==-1);
}
判断堆栈是否满
bool IsFull( Stack S )
{
return (S->Top == S->MaxSize-1);
}
(3)push操作
void Push(Stack PtrS,ElementType item)
{
if(PtrS->Top == MaxSize-1) {
printf("栈满了");
return;
} else {
(PtrS->Top)++;
PtrS->Data[PtrS->Top] = item;
return;
}
}
(4)pop操作
ElementType Pop( Stack S )
{
if ( IsEmpty(S) ) {
printf("堆栈空");
return ERROR; /* ERROR是ElementType的特殊值,标志错误 */
}
else
return ( S->Data[(S->Top)--] );
}