栈,队列,数组


栈的定义

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

栈是一种特殊的线性表,只不过对于普通的线性表而言,当我们进行插入,删除一个数据元素的时候,我们可以在任意地方进行插入和删除,但对于栈而言,我们会限制它的插入删除操作,要求插入删除操作只能在栈顶的一端进行。

线性表是具有相同数据类型的n个数据元素的有限序列,其中n为表长,若n=0时,为空表,若用L代表线性表的话,则一般表示为:L=(a1,a2,a3,...an)

栈与普通的线性表相比,其实是具有相同的数据结构的,这些数据元素之间都存在一对一,一前一后的逻辑关系。

栈的常考题型

会告诉进栈顺序,然后让我们判断有哪些出栈顺序?
栈顶(Top)线性表允许插入和删除的那一端。
栈底(Bottom)固定的,不允许插入和删除的另一端。
栈的特性:后进先出
栈的基本操作
InitStack(&S):初始化一个空栈。
Push(&S,x):入栈,若栈未满,则将x加入,使其成为新栈顶。
Pop(&S,&x):出栈,若栈为非空,弹出栈顶元素,并用x返回。
DestroyStack(&S):销毁栈,并释放栈S所占用的存储空间。
GetTop(S,&x):读栈顶元素,但不出战,若栈为非空,则使用x返回。

顺序栈

采用顺序存储的栈称为顺序栈。
由于顺序栈使用的是静态数组来存放数据元素的,所以当数据元素存满时,他的容量不可改变,如何解决这个问题?
1 可以事先分配较大的存储空间,但是会造成空间浪费,从而引出了:

共享栈的概念

共享栈是指两个顺序栈共享一个一维数组空间。

#define MaxSize 10
typedef struct{
    int data[MaxSize];
    int top;
}SqStack;
//顺序栈

void InitStack(SqStack &S){
    S.top=-1;
}
//初始化栈
bool push(SqStack &S,int x){
    if(S.top==MaxSize-1){
        return false;   
    }
    S.top=S.top+1;
    S.data[S.top]=x;
    return true;
}
//入栈
bool pop(SqStack &S,int  &x){
    if(S.top==-1){
        return false;
    }
    x=S.data[S.top];
    S.top=S.top-1;
    return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值