栈的存储结构
栈是限定仅在表尾进行插入和删除操作的线性表
typedef struct
{
int data[MAXSIZE];
int top;//作为指针标记栈顶元素
}SqStack;
节点由存放数据元素的数据域和存放栈顶元素的指针组成
同线性表,元素具有相同的类型,相邻元素具有前驱和后继关系。
一、栈的初始化操作
目的:初始化栈
实现:top=-1代表此时栈为空
void InitStack(SqStack &S)
{
S.top=-1;
}
二、栈的相关函数
判断栈是否为空
若栈为空返回false,否则返回true
bool StackEmpty(SqStack &S)
{
if (S.top==-1)
return true;
else return false;
}
判断栈是否已满
若栈为已满返回false,否则返回true
bool StackFull(SqStack &S)
{
if (S.top==MAXSIZE-1)
return true;
else return false;
}
获得栈的长度
利用栈顶指针返回栈的长度
int StackLength(SqStack S)
{
return ++S.top;
}
这里没有使用SqStack的引用目的是不在此函数中改变传入对象的top值
三、获得栈顶元素
功能:输出栈顶元素
实现:利用top取出栈顶元素即可
void GetTop(SqStack &S)
{
if (StackEmpty(S))
{
cout<<"栈为空"<<endl;
return ;
}
cout<<"栈顶元素为:"<<S.data[S.top]<<endl;
}
四、栈的插入
功能:插入e到栈顶
实现:首先判断栈是否已满,未满向上移动栈顶指针并插入e
void Push(SqStack &S,int e)
{
if (StackFull(S))
{
cout<<"栈已满"<<endl;
return ;
}
S.top++;
S.data[S.top]=e;
cout<<"插入元素:"<<e<<"成功!"<<endl;
}
五、出栈操作
功能:弹出栈顶元素
实现:判断是否为空,非空则输出栈顶元素,并向下移动栈顶指针
void Pop(SqStack &S)
{
if (StackEmpty(S))
{
cout<<"栈为空"<<endl;
return ;
}
int e=S.data[S.top];
S.top--;
cout<<"弹出的元素是:"<<e<<endl;
}
总结
本篇介绍了使用静态数组创建栈并进行插入弹出元素等操作
测试代码及运行实例
#include<iostream>
using namespace std;
#define MAXSIZE 1000
int main()
{
SqStack s;
InitStack(s);
for (int i = 0; i < 10; i++)
{
Push(s,i+1);
GetTop(s);
}
cout<<"栈的长度为:"<<StackLength(s)<<endl;
for (int i = 0; i < 10; i++)
{
Pop(s);
}
return 0;
}