持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情。
队列
先进先出,简单队列可能存在假溢出或假满的问题。
循环队列(重点)
能解决假溢出或假满这一问题。
rear为下标。
%取余操作防止其假溢出或假满。
满队状态永远有一个空位不能存储数据,否则就成空队了。
双端队列
允许两端都可以进行入队和出队的队列。(输入输出不受限)
A.若输入受限,进队为1234,出队得不到4213----符合题意
若输出受限,进队后想得到4213,可以得到,不合题意
B.若输入受限,进队为1234,出队得不到4231,符合题意
若输出受限,进队后想得到4231,得不到,符合题意
C.若输入受限,进队为1234,出队可以得到4132,不合题意
若输出受限,进队后想得到4132,得不到,符合题意
D.若输入受限,进队为1234,出队可以得到1234,不合题意
若输出受限,进队后想得到1234,可以得到,不合题意
链队
实际上是一个同时带有队头指针和队尾指针的单链表。
出队:e = front->data;front = front->next;
也是先进先出,初始头尾指针在一个结点,入队时,头指针不变,尾指针指向新结点的指针域。
循环队列与链式队列的比较
队列的应用主要在层次遍历中。队列应用题:
矩阵压缩
k = n*(i-1)+j-1
对称矩阵
k = (i-1)(1+i-1)/2+j-1
下三角公式(i>=j)
上三角i/j互换(i<j)
三角矩阵*
下三角矩阵的k和i,j的关系:
i<j时,全为0.
练习*:
三对角矩阵
练习
稀疏矩阵
稀疏矩阵一般的压缩存储方式有两种:三元组和十字链表。
只需定义 int[4][3]的三元组。
练习:
十字链表:
弧结点:尾表示弧的尾结点
头表示弧的头结点
同头:指向和这条弧有相同头结点的点
同尾:指向和这条弧有相同尾结点的点
对于矩阵:
先推Sn(所求行前面一共有多少个元素),再求所求的具体元素在该行所对应的下标,再根据一维数组的初始值判断是否减一,如:
若一维数组初始为0,则减一
若一维数组初始为1,则不变
若一维数组初始为n,则加(n-1)