第 3章 栈和队列——数据结构

本文详细介绍了数据结构中的栈和队列。栈是一种后进先出(LIFO)的数据结构,常用于后缀表达式求值和操作系统的调用堆栈等;队列则是一种先进先出(FIFO)的数据结构,常见于任务调度和消息传递。文章涵盖了栈的顺序存储、链式存储以及两栈共享空间的实现,队列的特性与应用,同时讨论了它们在实际问题中的应用。
摘要由CSDN通过智能技术生成

1.特殊线性表——栈

栈:限定仅在表尾进行插入和删除操作的线性表

空栈:不含任何数据元素的栈。

允许插入和删除的一端称为栈顶,另一端称为栈底

栈的示意图——插入:入栈、进栈、压栈         删除:出栈、弹栈

栈的操作特性:后进先出

栈只是对表插入和删除操作的位置进行了限制,并没有限定插入和删除操作进行的时间。

栈的抽象数据类型定义

 

ADT Stack

Data

   栈中元素具有相同类型及后进先出特性,

   相邻元素具有前驱和后继关系

Operation

   InitStack  功能:栈的初始化

   DestroyStack功能:销毁栈

   Push 功能:在栈顶插入一个元素  

     Pop 功能:删除栈顶元素

     GetTop  功能:读取当前的栈顶元素

             Empty 功能:判断栈是否为空

          endADT

2.栈的顺序存储结构及实现

顺序栈类的声明

const  int  MAX_SIZE=100;

template  <class T>

class  seqStack

{

    public:

        seqStack ( ) ;

        ~seqStack ( );

        void  Push ( T  x );

        T   Pop ( );

        T   GetTop ( );

        bool  Empty ( );

    private:

        T  data[MAX_SIZE];

        int  top;

}

顺序栈的实现

入栈操作接口: void  Push( T  x );

判断是否是空栈:操作接口: bool Empty( )

取栈顶:操作接口: GetTop(  );

出栈:操作接口: T Pop(  );

3.两栈共享空间(双端栈)——使用一个数组来存储两个栈,让一个栈的栈底为该数组的始端,另一个栈的栈底为该数组的末端,两个栈从各自的端点向中间延伸。

两栈共享空间的实现

插入——操作接口:void Push(int i, T x) ;

删除 ——操作接口:T Pop(int i) ;

4.链栈:栈的链接存储结构

链栈的实现

插入(入栈)——操作接口: void Push(T x);

删除(出栈)——操作接口: T Pop( );

5.后缀表达式求值

中缀表达式:操作数栈和运算符栈

6.特殊线性表——队列

队列:只允许在一端进行插入操作,而另一端进行删除操作的线性表。

空队列:不含任何数据元素的队列。

允许插入(也称入队、进队)的一端称为队尾,允许删除(也称出队)的一端称为队头

队列的操作特性:先进先出

队头指针和队尾指针的说明

①队头指针指向队列中的第一个元素之前的元素,队尾指针指向队列中的最后一个元素

队头指针指向队列中的第一个元素,队尾指针指向队列中的最后一个元素的后一个位置
队空: front==rear
队满: front==rear
队列的链接存储结构及实现
 队头指针即为链表的头指针
 

7.

8.

9.

10.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值