顺序栈

数据结构——栈,是一种先入后出的数据结构。就像一摞盘子一样,一个一个地往上摆。取盘子的时候是在最上面的盘子先被取出来,所以先放进去的就要后取出来。栈的特性具有下面两种特性:

(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;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值