1、堆栈的定义
具有一定操作约束的线性表,只在一端(栈顶,Top)做插入、删除操作。堆栈的基本操作主要有两类:a、插入数据:入栈(Push);b、删除数据:出栈(Pop)。
2、栈的顺序存储实现
2.1 栈的基本数据结构
/* 定义堆栈的数据结构 */
#define MaxSize 10
typedef int ElementType;
typedef struct _Stack{
ElementType Data[MaxSize];
int Top;
} Stack;
2.2 创建一个空栈
/* 创建一个堆栈 */
Stack *CreateStack()
{
Stack *S = (Stack*)malloc(sizeof(Stack));
if(NULL != S) S->Top = -1;
return S;
}
2.3 压栈操作
/* 压栈操作,先移动Top,后压入 */
void Push( Stack *PtrS, ElementType item )
{
if (IsFull(PtrS)) // 判断是否栈满
{
printf("Stack is full!\n");
return;
}
else
{
PtrS->Data[++(PtrS->Top)] = item;
return;
}
}
2.4 出栈操作
/* 出栈操作,先弹出,后移动Top */
ElementType Pop( Stack *PtrS )
{
if (IsEmpty(PtrS)) // 判断堆栈是否为空
{
printf("The stack is empty!\n");
return -1;
}
else
return ( PtrS->Data[(PtrS->Top)--] );
}
2.5 完整示例代码
/* 顺序存储堆栈的实现 */
#include <std