顺序栈的表示与操作

一,顺序栈

1.顺序栈的存储结构
2.顺序栈的初始化
3.顺序栈的入栈
4.顺序栈的出栈
5.取顺序栈的栈顶元素

首先栈是一个先进后出的结构
栈分两种存储方式,顺序表示和链式表示,队列也是,以后会讲

1.顺序栈的存储结构

#define maxsize 100
 typedef struct sqstack
 {
	 int *top;
	 int *base;
	 int stacksize;
 }sqstack;

要记住代码,首先理解代码
首先一个栈最重要的是什么,由代码得:
两个指针,一个 栈的容量
but为什么是两个指针,一个不行吗
还真不行,C语言数组下标从0开始,0就表示有一个了,又不能用负数,那让空栈情何以堪。

图纸有了,接下来就是如何建房子,即1.顺序栈的初始化(构造一个空栈)

#define overflow -2
int initstack(sqstack &s)
{
	s.base =new int[stacksize];
	if(!s.base)exit(overflow);
	s.top=s.base;
	s.stacksize=maxsize;
}

2.顺序栈的入栈

int push(sqstack &s,int &e)
{
if(s.top-s.base==stacksize)return error;  //栈已满,你放不了了
*s.top++=e;
}

3.顺序表的出栈

int pop(sqstack &s,int &e)
{//删除s的栈顶元素,用e返回其值
	if(s.top==s.base)return error; //空栈,你还想取啥呢
	e=*--s.top; //既通过修改栈顶指针的值来删除栈顶元素,又让e返回栈顶元素,可谓一举两得
}

顺便一提,栈顶指针一直在栈顶元素的上一位,如最开始base和top都指向a[0],现加入一个元素,top加1,指向a[1],所以栈顶指针在栈顶元素的上一位。因此,返回栈顶元素时,应写成e=*- -s.top; 而不能写成 e=*s.top- -;

4.取栈顶元素

int gettop(sqstack &s)
{
	if(s.top!=s.base)    //判断栈是否为空
	return *(s.top-1);
}

该函数可返回栈顶的元素,而不修改栈顶指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值