大话数据结构part4----栈与队列

栈(stack):是限定仅在表尾(栈顶)进行插入和删除操作的线性表。

  • 通常把允许插入和删除的一端称为 栈顶(top),另一端称为 栈底(bottom),不含任何任何数据元素的栈称为 空栈。栈又称为 后进先出(Last In First Out) 的线性表,简称 LIFO 结构。

  • 是线性表的特例,其具备先进后出 FILO 特性。可以使用线性表的顺序存储结构(即数组)实现栈,将之称之为 顺序栈;可以使用单链表结构实现栈,将之称之为 链栈

栈的两种常用操作:

栈的插入操作叫做进栈,也称压栈、入栈,栈的删除操作叫做出栈。

栈的进出变化:

3个整型数字元素1、2、3依次进栈,会有5种出栈次序:

1) 1,2,3进,3,2,1出。出栈次序为321.

2) 1进1出,2进2出,3进3出。出栈次序为123.

3) 1进,2进2出,3进3出,1出。出栈次序为231.

4) 1进,2进,2出,1出,3进3出。出栈次序为213.

5) 1进,1出,2进,3进,3出,2出。出栈次序为132.

栈的抽象数据结构类型

ADT 栈(stack)  
Data
    同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系。

Operation
    InitStack(*S);        //初始化操作,建立一个空栈S
    DestroyStack(*S);    //若栈存在,则销毁它  
    ClearStack(*S);        //将栈清空
    StackEmpty(S);        //若栈为空,返回true,否则返回false
    GetTop(S,*e);        //若栈存在且非空,用e返回S的栈顶元素
    Push(*S,e);            //若栈S存在,插入新元素e到栈S中并称为栈顶元素  
    Pop(*S,*e);            //删除栈S中栈顶元素,并用e返回其值  
    StackLength(S);        //返回栈S的元素个数
endADT

栈的顺序存储结构及实现

栈是线性表的特例,栈的顺序存储其实是线性表顺序存储的简化,简称为顺序栈。

栈的顺序存储结构及实现

进栈操作即插入操作,出栈即删除操作,实现如下:

/*
进栈操作push
插入元素e为新的栈顶元素
*/
Status Push(SqStack *S, SElemType e)
{
    /*栈满*/
    if(S->top == MAXSIZE - 1)
    {
        return ERROR;
    }
    /*栈顶指针增加一*/
    S->top++;
    /*将新插入元素赋值给栈顶空间*/
    S->data[S->top] = e;
    return OK;
}

/*出栈pop*/
Status Pop(SqStack *S, SElemType *e)
{
    if(S->top == -1)
        return ERROR;
    /*将要删除的栈顶元素赋值给e*/
    *e = S->data[S->top];
    /*栈顶指针减一*/
    S->top--;
    return OK;
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值