数据结构3 栈/队列

一.栈

1.概念

数据元素先进后出

只能在栈顶插入或删除
栈的插入和删除称为入栈和出栈


2.存储结构

(1)顺序栈

栈顶/栈尾“指针”可以是指针变量或整形变量

栈尾指针指向栈尾
初始为 ① NULL,指针 ② -1,整形

栈顶指针指向栈顶元素的下一个位置,初始指向栈尾

判空:
①top=base=NULL, 指针变量
②top=base= -1, 整形变量

选择题伪代码判空:S.top==0

(2)链栈(无头结点-红):

仅有栈顶指针
栈顶指针指向an,an再指向aₙ₋₁…


3.栈的应用

原理:栈有记忆当前状态的功能
应用:调用函数/递归/括号匹配/表达式求值
⇒递归算法空间复杂度一般为0(logn),如快速排序


二.队列

1.概念

数据元素先进先出
front:队头(删除元素)
rear:队尾(插入元素)

2.存储结构

2-1顺序-循环队列

(1)队头/队尾指针
①都是整形变量
②队头指针始终指向队列头元素
③队尾指针始终指向队尾元素的下一个位置,初始指向队头:front=rear=0(理论判空)


(2)判空:
rear=front(需要声明少用一个元素)
不然也有可能实际是队满而不是队空

(3)判满(默认少用一个空间,除非声明用tag):
队满:为队列分配的存储空间仅剩一个空间时

判断队满:(rear+1)%m=q.front

(4)元素个数:
(rear-fromt+m)%m
m为数组长度(非元素个数)

(5)插入,删除元素(默认少用一个空间)
①插入(在队尾):rear=(rear+1)%m

②删除(在队头):front=(front+1)%m

2-2链队列(头结点)

队头指针指向头结点,
队尾指针初始指向头结点
判空:front=rear


总结

1.指针

(1)顺序存储中可以是指针变量也可以是整形用来标识位置
①栈(栈顶元素):指针变量(课本)
②队列(队尾元素):整形,标识位置(通用)。因为循环队列不用整形会很麻烦

(2)链式存储都是指针变量

2.尾部指针(栈顶/队尾)

(1)顺序存储(非空):指向尾部元素下一个位置
①栈
栈顶指针初始指向栈尾top=base=Null(课本,指针变量)
top=base=-1(其他,整型变量)

②队列 队尾指针初始指向队头front=rear=0(理论判空)

(2)链式存储:指向当前元素位置(没法指向下一个位置)
①栈(不带头结点):仅有栈尾指针
②队列(带头结点):队尾指针初始指向头结点


3.考点

1:栈和队列本质上是操作受限的线性表


发布了46 篇原创文章 · 获赞 15 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41850194/article/details/102457833
今日推荐