堆栈
有时为了方便解决问题需要有种存储方法,能顺序存储运算数,并在需要时“倒序”输出!由此引入堆栈。
堆栈(Stack) :具有一定操作约束的线性表,其特点如下:
➢只在一端(栈顶,Top)做插入、删除
➢插入数据:入栈(Push)
➢删除数据:出栈(Pop)
➢后入先出: Last In First Out (LIFO)
栈的顺序存储实现
主要框架:
类型名称:堆栈(Stack)
数据对象集:一个有0个或多个元素的有穷线性表。
操作集:长度为MaxSize的堆栈S∈Stack,堆栈元素item∈ElementType
- Stack CreateStack( int MaxSize):生 成空堆栈,其最大长度为MaxSize;
- int IsFull( Stack S, int MaxSize ):判断堆栈S是否已满;
- void Push( Stack S, ElementType item ):将元素item压入堆栈;
- int IsEmpty ( Stack S ):判断堆栈S是否为空;
- "ElementType Pop( Stack S ):删除并返回栈顶元素;
- void Display(Stack S): 从栈底 到 栈顶输出栈的所有元素
栈的顺序存储结构通常由一个维数组和一个记录
栈顶元素位置的变量组成。
#include<bits/stdc++.h>
using namespace std;
#define MaxSize 100
struct SNode {
int Date[MaxSize];
int Top;
};
typedef SNode* stack;
生成空栈(CreateStack)
Stack CreateStack()
{
Stack S = (Stack)malloc(sizeof(struct SNode));
S->Top = -1;
return S;
}
入栈(Push)
void Push(stack a, int b) {
if (a->Top == MaxSize - 1)
{
cout << "堆栈已满!\n";
return;
}
else
{
a->Date[++(a->Top)]=b;
return;
}
}
出栈(Pop)
int Pop(Stack a)
{
if (a->Top