栈-C语言

目录

栈的定义和特点

顺序栈的表示和实现

顺序栈的初始化

算法步骤:

算法描述:

顺序栈的入栈

算法步骤:

算法描述:

顺序表的出栈

算法步骤:

算法描述:


栈的定义和特点

栈是限定仅在表尾进行插入或删除操作的线性表。

表尾称为栈顶(top),表头称为栈底(bottom),不含元素的空表称为空栈。

特点:先进后出(记忆:洗碗的时候把碗一个一个往上叠,拿碗的时候从上面一个一个拿出)

顺序栈的表示和实现

顺序栈:指利用顺序结构实现的栈。

鉴于C语言中数组的下标是从0开始的,描述语言时不便,便设指针base指示栈底元素在顺序栈的位置。当top=base时,表示空栈。

//顺序栈的存储结构
#define MAXSIZE 100
typedef struct{
	SElemType *base;//栈尾指针
	SElemType *top;//栈顶指针
	int stacksize;//栈可用的最大容量
}SqStack;

说明:

  1. base为栈底指针,初始化完成后,base指针始终指向栈尾。若base=NULL,则此栈不存在。
  2. top为栈顶指针,top初始指向栈尾(此时top=base),每当插入一个元素时,*top都加1。栈非空时,top始终指向栈顶元素的上一个位置。
  3. stack指示栈可用最大容量。

顺序栈的初始化

算法步骤:

  1. 为顺序栈动态分配一个最大容量为MAXSIZE的数组空间,使base指向这个数组的基地址(也可以认为是这个数组第一个下标0),即栈底。
  2. 将栈顶指针top初始为base,表示栈为空。
  3. stacksize置为栈的最大容量MAXSIZE。

算法描述:

status InitStack(SqStack &s){
	//构造空栈
	s.base=(SElemType*)malloc(MAXSIZE *sizeof(SElemType));
	//为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
	if(!base) return ERROR;//如果base为0,就说明分配错误
	s.top=s.base;//top初始为base
	S.stacksize=MAXSIZE;//stacksize的值为MAXSIZE
	return OK;
}

顺序栈的入栈

算法步骤:

  1. 判断是否栈满,若满则返回ERROR。
  2. 新元素压入栈顶,栈顶指针加1.

算法描述:
 

status Push(SqStack &S,SElemType e){
	//用push来表示入栈操作,插入新元素e为新的栈顶元素
	if(S.top-S.base==S.stacksize)  return ERROR;//判断是否栈满
	*S.top++=e;  //将元素e压入栈顶,栈顶指针加1
	return OK;
}

顺序表的出栈

算法步骤:

  1. 判断是否为空栈。
  2. 栈顶指针减1,栈顶元素出栈。

算法描述:

status Pop(SqStack &s,SElemType &e)
{//用Pop来表示出栈操作,使用引用删除元素e
	if(S.top==S.base) return ERROR;//判断是否为空
	e=*--S.top;//栈顶指针减1,元素e出栈
	return OK;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值