考研408--数据结构--day4--栈&队列

(以下内容全部来自上述课程)

目录

    • [1. 栈的定义](#1. 栈的定义)
    • [2. 基本操作](#2. 基本操作)
    • [3. 小结](#3. 小结)
  • 顺序栈
    • [1. 定义](#1. 定义)
    • [2. 基本操作](#2. 基本操作)
      • [2.1 初始化](#2.1 初始化)
      • [2.2 进栈操作](#2.2 进栈操作)
      • [2.3 出栈操作](#2.3 出栈操作)
      • [2.4 读栈顶元素操作](#2.4 读栈顶元素操作)
    • [3. 另一种方式](#3. 另一种方式)
    • [4. 共享栈](#4. 共享栈)
    • [5. 小结](#5. 小结)
  • 链栈
  • 队列
    • [1. 定义](#1. 定义)
    • [2. 基本操作](#2. 基本操作)
    • [3. 小结](#3. 小结)
  • 队列的基本操作
    • [1. 顺序实现](#1. 顺序实现)
      • [1.1 初始化操作](#1.1 初始化操作)
      • [1.2 入队操作](#1.2 入队操作)
      • [1.3 循环队列](#1.3 循环队列)
    • [2. 判断满空](#2. 判断满空)
    • [3. 其他出题方法](#3. 其他出题方法)
    • [4. 小结](#4. 小结)
    • [5. 链式实现](#5. 链式实现)
      • [5.1 初始化](#5.1 初始化)
      • [5.2 入队](#5.2 入队)
      • [5.3 出队](#5.3 出队)
      • [5.4 队列满的条件](#5.4 队列满的条件)
    • [6. 小结](#6. 小结)
  • 双端队列
    • [1. 定义](#1. 定义)
    • [2. 考点](#2. 考点)
    • [3. 小结](#3. 小结)

1. 栈的定义

类似于叠石头 ,只能往上叠,而不是塞到下面。


复习:

2. 基本操作


3. 小结

顺序栈

1. 定义

标志 :栈顶指针

2. 基本操作

2.1 初始化

定义结构体-->初始化-->测试使用

因为初始化的时候栈是空的,所以栈顶指针会指向-1,反过来,top=-1就代表了栈空。

2.2 进栈操作

指针指向下一位-->存数据(赋值)
注意 :++在前面,就是先+1再操作;++在后面,就是先操作之后再+1

2.3 出栈操作

先把元素搞出去-->指针指回上一位

ps:逻辑上删除数据是因为指针向下移动了,之前指的数据就不算在栈内了,就是干脆无视它了,但是会残留在内存中。

2.4 读栈顶元素操作

数据慢慢存进去,top一直指向栈顶元素,所以直接按照top的索引得到数据即可。

3. 另一种方式

之前的操作是建立在-----初始化中:栈顶指针指向-1,还没有分配空间的位置。

而接下来的操作是建立在-----初始化中:栈顶指针指向0,分配了空间但是没有存入数据的位置。

由此,索引判断栈空的条件就是top=0.

入栈:先赋值,再移动指针。

出栈:先出栈,再移动指针。

4. 共享栈

之前的栈因为一个地方只能存一个栈的数据,这个栈内的数据可能不总被用到,就导致利用率低。

所以可以将一个栈的空间分给两个栈,这两个栈存各自的数据,栈顶指针就指向各自的栈顶,来提高利用率。

5. 小结

链栈

类比带有限制的链表,这里不再赘述。




队列

1. 定义

类比排队买饭。


2. 基本操作

3. 小结

队列的基本操作

1. 顺序实现

标志:有头指针和尾指针。

1.1 初始化操作

定义结构体-->初始化(头指针尾指针刚开始指向同一个位置)-->测试使用

1.2 入队操作

头指针不动,加入元素,尾指针向后移动。

如图,头指针上面的数据都出队了下面又有数据入队,尾指针需要跳回头指针的下面,也就是队尾,就形成了循环队列(循环队列第一张图)。

这样的操作可以用取余的算法实现。

1.3 循环队列

因为初始化的时候,头指针和尾指针同时指向0,所以如果判断队列满了还是用这个方法就会造成错误。

这里就只能牺牲一个存储单元,避免和初始化的空队列的条件重复。


2. 判断满空

牺牲一个存储单元。

定义size,size满了,就是队列空了。

定义一个tag,插入成功就是0,头尾指针都指向同一个位置并且插入成功的tag=1,就表示队列满了。

3. 其他出题方法

左侧是尾指针指向即将存入数据的空间,也就是尾数据的下一个空间。

右侧是我们上面讲的,尾指针指向尾数据。

所以操作上会有一点点的不同,做题的时候应该注意头尾指针到底指向哪里。


4. 小结

5. 链式实现

定义结点,定义队列。

5.1 初始化

带头结点,头尾指针就都指向头结点。

不带头结点,头尾指针就都指向NULL了。

5.2 入队

  • malloc:分配空间
  • s->data=x;:通过指针s访问新节点的data成员(数据域)是x
  • s->next=NULL;:通过指针s访问新节点的next成员(指针域)是NULL
  • Q.rear->next=s;:问当前队尾节点的next指针域,是s
  • Q.rear=s;:更新队列Q的队尾指针rear,让它指向新节点s(因为s现在是队列的最后一个节点了)

带头结点:

头指针指着头结点,尾指针指向新插入的数据。

不带头结点:

头尾节点都指向新插入的数据。

5.3 出队


5.4 队列满的条件

6. 小结

双端队列

1. 定义


2. 考点




3. 小结

相关推荐
TL滕1 小时前
从0开始学算法——第三天(数据结构的多样性)
数据结构·笔记·学习·算法
无限进步_1 小时前
深入理解顺序表:从原理到完整实现
c语言·开发语言·数据结构·c++·算法·链表·visual studio
专注API从业者2 小时前
Node.js/Python 调用淘宝关键词搜索 API:从接入到数据解析完整指南
开发语言·数据结构·数据库·node.js
liu****2 小时前
九.操作符详解
c语言·开发语言·数据结构·c++·算法
无盐海2 小时前
Redis底层数据结构
数据结构·数据库·redis
无限进步_2 小时前
基于顺序表的通讯录系统设计与实现
c语言·开发语言·数据结构·c++·后端·算法·visual studio
小此方2 小时前
Re:从零开始的链式二叉树:建树、遍历、计数、查找、判全、销毁全链路实现与底层剖析
c语言·数据结构·c++·算法
FMRbpm2 小时前
STL中栈的实现
数据结构·c++·算法
AI科技星2 小时前
加速正电荷产生的电场、引力场与磁场变化率方向关系的数学求导验证——基于张祥前统一场论核心方程
数据结构·人工智能·经验分享·算法·机器学习·计算机视觉