顺序栈介绍

顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。通常习惯的做法是:以top = 0表示空栈,鉴于C语言中数组的下标约定从0开始,则当以C语言作描述语言时,如此设定会带来很大不便,因此另设指针base指示栈底元素在顺序栈中的位置。当top和base的值相等时,表示空栈。顺序栈的定义如下:

//-----顺序栈的存储结构------ 
#define MAXSIZE 100		//顺序栈存储空间的初始分配量 
typedef struct
{
	int *base;	//栈底指针 
	int *top; 	//栈底指针 
	int stacksize;		//栈可用最大容量 
}SqStack;

顺序栈的初始化

[算法步骤 ]

1.为顺序栈动态分配一个最大容量为MAXSIZE的数组空间,使base指向这段空间的基地址,即栈底。

2.栈顶指针top初始为base,表示栈为空

3.stacksize置为栈的最大容量MAXSIZE 

//初始化
bool InitStack(SqStack &S)//构造一个空栈S 
{
	S.base = new int[MAXSIZE];	//为顺序栈动态分配一个最大容量为MAXSIZE的数组空间 
	if(!S.base)
		exit(1);//存储分配失败
	S.top=S.base;//top初始为base,空栈
	S.stacksize=MAXSIZE; //stacksize置为栈的最大容量MAXSIZE
	return true;
} 

 顺序栈的入栈

[算法步骤]

1.判断栈是否满,若满则返回ERROR

2.将新元素压人栈顶,栈顶指针加1。

//入栈
bool Push(SqStack &S,int e)//插人元素e为新的栈顶元素
{
	if(S.top-S.base==S.stacksize) 
		return false;//栈满
	*S.top++=e;//将元素e压入栈顶,栈顶指针加1
	return true;
}

顺序栈的出栈

[算法步骤]

1.判断栈是否空,若空则返回ERROR

2.栈顶指针减1,栈顶元素出栈。

//出栈
bool Pop(SqStack &S, int &e)//删除S的栈顶元素,用e返回其值
{
	if(S.top==S.base)
		return false;//栈空
	e=*--S.top;//栈顶指针减1,将栈顶元素赋给e
	return true; 
}

 取顺序栈的栈顶元素

//取栈顶元素
int GetTop(SqStack S)//返回s的栈顶元素,不修改栈顶指针
{
	if(S.top!=S.base)//栈非空
		return *(S.top-1);//返回栈顶元素的值,栈顶指针不变
} 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值