数据结构——栈,是一种先入后出的数据结构。就像一摞盘子一样,一个一个地往上摆。取盘子的时候是在最上面的盘子先被取出来,所以先放进去的就要后取出来。栈的特性具有下面两种特性:
(1)组成的数据元素是相同类型的,并且数据间线性排列。
(2)只能对栈顶的数据元素进行操作。
栈结构,可以分为两种——分别是顺序栈和链栈。顺序栈存放数据使用的是数组的形式。这里要介绍的顺序栈。
顺序栈采用的是地址连续的存储空间,依次存储栈中的数据元素,由于入栈和出栈运算都是在栈顶进行的,而栈底位置是固定不变的,可以将栈底位置设置为数组空间的起始位置。而栈顶的位置是会随着数据元素的出栈和入栈发生改变的,可以用一个变量来记录栈顶的位置。所以顺序栈的数据结构如下:
typedef struct
{
int data[100];//这里的数组暂定为100,用户可以自行更改该值
int top;
}SeqStack;
void InitStack(SeqStack *seqstack)//初始化顺序栈
{
if (!seqstack)
{
cout<<"stack内存分配失败!"<<endl;
}
else
{
seqstack->top=-1;
}
}
bool IsEmpty(SeqStack *seqstack)//判断顺序栈是否为空
{
if (!seqstack)
{
cout<<"该栈为空,请检查数据!"<<endl;
return true;
}
else
{
if (seqstack->top==-1)
{
cout<<"该栈为空"<<endl;
return true;
}
else
{
return false;
}
}
}
bool IsFull(SeqStack *seqstack)//判断顺序栈是否已满
{
if (!seqstack)
{
cout<<"内存分配失败!"<<endl;
return false;
}
else
{
if (seqstack->top>99)
{
cout<<"该栈已满!"<<endl;
return true;
}
else
return false;
}
}
void GetTopElem(SeqStack *seqstack,int &element,int num)//取出栈顶元素
{
if (!seqstack)
{
cout<<"请检查该栈是否存在!"<<endl;
}
else
{
if (num<=seqstack->top)
{
element=seqstack->data[num];
}
else
cout<<"该元素不存在"<<endl;
}
}
bool Push(SeqStack *seqstack,int element)//数据入栈
{
if (!seqstack)
{
cout<<"请检查该栈是否存在"<<endl;
return false;
}
else
{
if (seqstack->top<=99)
{
seqstack->top++;
seqstack->data[seqstack->top]=element;
return true;
}
else
return false;
}
}
bool Pop(SeqStack *seqstack,int &element)//数据出栈
{
if (!seqstack)
{
cout<<"请检查该栈是否存在!"<<endl;
return false;
}
else
{
if (!IsEmpty(seqstack))
{
element=seqstack->data[seqstack->top];
seqstack->top--;
}
return true;
}
}