数据结构与算法基础---栈和队列


前言

本章的内容并不难,重点需要理解的是栈和队列是操作受限的线性表,是在前一章线性表的基础上增加了一些约束条件。另外本章涉及到递归的概念,这个在后面章节有更多的应用,一定要重点理解掌握~

1 栈和队列的定义和特点

  栈和队列是两种常用的、重要的数据结构
  栈和队列是限定插入和删除只能在表的“端点”进行的线性表
  栈和队列是线性表的子集(是插入和删除位置受限的线性表)
  普通线性表:插入范围为:1~n+1 删除范围为:1~n
  栈:插入只能是插入在n+1位置,删除只能是在n位置(后进先出
    由于栈的操作具有后进先出的固有特性,使得栈成为程序设计中的有用工具。另外,如果问题求解的过程具有“后进先出”的天然特性的话,则求解的算法中也必然需要利用“栈”
  队列:插入只能是插入在n+1位置,删除只能是在1位置(先进先出
    由于队列的操作具有先进先出的特性,使得队列成为程序设计中解决类似排队问题的有用工具

1.1 栈的定义和特点

  栈(stack)是一个特殊的线性表,是限定仅在一端(通常是表尾)进行插入和删除操作的线性表,又称为后进先出(Last In First Out)的线性表,简称LIFO结构
  栈的相关概念
    栈是仅在表尾进行插入、删除操作的线性表
    表尾(即an端)称为栈顶Top,表头(即a1端)称为栈底Base
    插入元素到栈顶(即表尾)的操作,称为入栈 “入” = 压入 = PUSH(x)
    从栈顶(即表尾)删除最后一个元素的操作,称为出栈 “出” = 弹出 = POP(y)
  (1)定义
  限定只能在表的一端进行插入和删除运算的线性表(只能在栈顶操作)
  (2)逻辑结构
  与线性表相同,仍为一对一关系
  (3)存储结构
  用顺序栈或链栈存储均可,但以顺序栈更常见
  (4)运算规则
  只能在栈顶运算, 且访问结点时依照后进先出(LIFO)的原则
  (5)实现方式
  关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的不同而不同
  栈与一般线性表的区别:仅在于运算规则不同
  一般线性表运算规则是随机存取,栈则是后进先出(LIFO)

1.2 队列的定义和特点

  队列(queue)是一种先进先出(Frist In Frist Out ---- FIFO)的线性表。在表一端插入(表尾),在另一端(表头)删除
  队列的相关概念
  (1)定义
  只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表(头删尾插
  (2)逻辑结构
  与线性表相同,仍为一对一关系
  (3)存储结构
  顺序队或链队,以循环顺序队列更常见
  (4)运算规则
  只能在队首和队尾运算, 且访问结点时依照先进先出(FIFO)的原则
  (5)实现方式
  关键是掌握入队和出队操作,具体实现依顺序队或链队的不同而不同

2 案例引入

  案例1:进制转换

  十进制整数N向其他进制数d(二、八、十六)的转换是计算机实现计算的基本问题
  转换法则:除以d倒取余
  该转换法则对应于一个简单算法原理:n = (n div d)d +

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值