数据结构-栈

文章详细介绍了栈的概念,包括栈的定义、基本操作如初始化、判断栈空、进栈、出栈等,以及栈的链式存储结构。此外,提到了共享栈的概念,即两个栈可以共享一个数组空间,并讨论了栈的数学性质——卡特兰数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、栈

*1.1定义

*1.2基本操作

二、共享栈

三、栈的链式存储结构

*题


一、栈

*1.1定义

        栈是只允许在一端进行插入和删除操作的线性表。

#define MaxSize 50
typedef struct{
    int data[MaxSize];  //存放元素
    int top;            //栈顶指针
}SqStack;

栈顶:线性表允许进行插入删除的一端

栈底:固定的,不允许进行插入和删除的另一端

空栈:不含任务元素的空表

栈的数学性质:n个不同的元素进栈,出栈元素不同排列的个数为\tiny \frac{1}{n+1}\textrm{C}_{2n}^{n},公式称卡特兰(Catalan)数, 

*1.2基本操作

根据从初始化的不同栈,操作细节也会不同

InitStack(&S):初始化一个栈S

S.top==-1

StackEmpty(S):判断一个栈是否为空,为空返回true,不空flase

S.top==-1

Push(&S,x):进栈,若栈S未满,x加入使之为新栈顶

S.data[++S.top]==x

Pop(&S,&x):出栈,若S非空,用x返回栈顶元素

x=S.data[S.top--]

GetTop(S,&x):读取栈顶元素,x返回栈顶元素

S.data[S.top]

DestroyStack(&S):销毁栈,并释放栈S占用的存储空间

二、共享栈

        利用栈底位置相对不变的特性,可以让两个顺序栈共享一个一维数组空间,将两个栈底分别设置在共享栈的空间两端

0号栈1号栈
判空top0=-1top1=MaxSize 
判满top0+1=top1
入栈S0.data[++S0.top]=xS1.data[--S1.top]=x
出栈S0.data[S0.top--]S1.data[S1.top++]

三、栈的链式存储结构

typedef struct Linknode{
    int data;                //数据域
    Struct Linknode *next;   //指针域
}*LiStack;                   //栈类型定义

 

*题

一个栈输入序列是1,2,3,...,n,输出的第一个序列是n,则第i个输出是元素是 n-i+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值