数据结构学习——栈与队列

1.定义

栈是一种特殊的线性表。其特殊性在于限定只能在表尾进行插入和删除数据元素的操作。如下所示:这里写图片描述
(1)结论:后进先出(Last In First Out),简称为LIFO线性表。
(2)栈顶(top):允许删除和插入操作的一端,另一端称为栈底(button)。

2.抽象数据类型

这里写图片描述

(1)进栈: Push(S,x)、可形象地理解为压入,这时栈中会多一个元素。
(2)出栈: Pop(S) 、 可形象地理解为弹出,弹出后栈中就无此元素了。

3.栈的顺序存储(栈的数组实现)

(1)数组下标为0的一端作为栈底
(2)top变量作为栈顶元素在数组里的位置,top必须小于储存栈的长度 Stacksize.
(3)空栈的判断条件为top = -1
(4)栈的结构定义

typedef int SElemtype;/*SElemtype的类型根据情况来定义*/
typedef struct
{
    SElemtype date[MAXSIZE];
    int top;/*用于栈顶指针*/
}SqStact;

(5)栈的进栈操作

        /*插入元素e为新的栈顶元素*/
        Status Push (SqStack *S, SElemtype e)
        {
                if (S-> top == MAXSIZE - 1)/*栈满*/
                {
                    return ERROR;
                }
                S->top++;/*栈顶指针加一*/
                S->date[S->top] = e;/*将新元素插入栈顶空间*/
                return OK;
        }

(6)栈的出栈操作

/*若栈不空,则删除栈顶的元素,用e返回其值,并返回OK;否贼返回ERROR*/
Status Pop(SqStack *S, SElemtype *e)
{
    if(S->top == -1)
        return ERROR;
        * e = S->date[top];
        * S->top --;
        return ok;
}

4.两栈共享空间

(1)数组有两个端点,两个相同数据类型的栈有两个栈底,让一个栈的栈底为数组的始端,即下标为0处,另一个栈为数组的末端,即下标为数组长度 n - 1处,这样,两个栈如果增加元素,就是两蹲点向中间延伸。

Status Push (SqDoubleStack *s, SqElemtype e, int stacknumber)
{
    if(s->top1 + 1 == s->top2)
    {
        return ERROR;
    }
    if(stacknumber == 1)
    s->date[++s->top1] = e;
    if(stacknumber == 2)
    s->date[- -s->top2] = e;
    return OK;
}

5.栈的链式存储结构

(1)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值