【数据结构】栈(上)2021-11-14

本文介绍了栈这一数据结构,详细阐述了栈的基本操作如入栈和出栈,遵循先入后出的原则。讲解了单栈的实现,并扩展到共享空间的双栈实现,讨论了满栈判断及如何在两个栈间切换操作。同时,博主分享了坚持写博客的日常,以及每日名言鼓励大家保持希望。
摘要由CSDN通过智能技术生成

今天有点忙,就少更点内容吧。
今天学栈。
栈是限定仅在表尾进行插入和删除操作的线性表。
栈有入栈和出栈两种操作,遵照先入后出原则,就像弹匣中的子弹一样。

请添加图片描述
单栈,有最大容量和一个栈顶,每个栈空间容纳一个元素,栈顶就是最后进入的元素,也是表尾

#include <stdio.h>
#define MAXSIZE 100 
#define OK 1
#define ERROR 0
typedef int SElemType;
typedef int Status;
typedef struct
{
	SElemType data[MAXSIZE];
	int top;
}SqStack;

入栈/压栈/进栈
先判断是否满栈,如未满,则栈顶向上移一位,将数据存入新栈顶

出栈/弹栈
先判断是否满栈,如未满,则将栈顶数据传给指针,栈顶向下移一位。
注意入栈和出栈的操作顺序有差异。

 Status Push(SqStack *s, SElemType e)
 {
 	if(s->top==MAXSIZE-1)
 	    return ERROR;
 	s->top++;
 	s->data[s->top]=e;
 	return OK;
 }
 
 Status Pop(SqStack *s, SElemType *e)
 {
 	if(s->top==-1)
 	    return ERROR;
 	*e=s->data[s->top];
 	s->top--;
 	return OK;
 }

两栈共享空间:
两个栈合并,有两个栈顶,一个从0开始加,一个从最大值开始减。
请添加图片描述

typedef struct 
 {
 	SElemType data[MAXSIZE];
 	int top 1;
 	int top 2;
 }SqDoubleStack;

共享栈入栈:
由于现在有两个栈顶,判断满栈的方法不同。
判断栈顶1加1是否等于栈顶2.
所以用此方法判断是否满栈,再判断要入哪一个栈(StackNumber),接着栈顶上移(相对中心),数据赋值。

Status DPush(SqDoubleStack *s,SElemType e,int StackNumber)
 {
 	if(s->1+1==s->2)
 	    return ERROR;
 	if(StackNumber==1)
 	    s->data[++s->top1]=e;
 	else if(StackNumber==2)
 	    s->data[--s->top2]=e;
 	return OK;
 }

共享栈出栈
先判断要出哪一个栈,再判断是否栈为空,
之后,先取数据再栈顶下移(相对中心)

Status DPop(SqDoubleStack *s,SElemType *e,int StackNumber)
{
	if(StackNumber==1)
	{
		if(s->top1==-1)
		    return ERROR;
		*e=s->data[s->top1--]
    }
    else if(StackNumber==2)
    {
    	if(s->2==MAXSIZE)
    	    return ERROR;
    	*e=s->data[s-top>2++];
    	
    }
    return OK;
}


——————————————————————————————————————————————————
坚持写博客的第三天,上学真忙啊,简直是忙里偷闲
每日一名言:
希望之花,盛开在梦想的道路上。
The flower of hopeness is blessing on the road of dream.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值