顺序栈的表示与操作

一,顺序栈

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

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

猜你喜欢

转载自blog.csdn.net/heipao17/article/details/115181734
今日推荐