队列、矩阵压缩

343 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

队列

先进先出,简单队列可能存在假溢出或假满的问题。

循环队列(重点)

能解决假溢出或假满这一问题。 rear为下标。 %取余操作防止其假溢出或假满。 image.png

满队状态永远有一个空位不能存储数据,否则就成空队了。

双端队列

允许两端都可以进行入队和出队的队列。(输入输出不受限)

image.png

A.若输入受限,进队为1234,出队得不到4213----符合题意
  若输出受限,进队后想得到4213,可以得到,不合题意
B.若输入受限,进队为1234,出队得不到4231,符合题意
  若输出受限,进队后想得到4231,得不到,符合题意
C.若输入受限,进队为1234,出队可以得到4132,不合题意
  若输出受限,进队后想得到4132,得不到,符合题意
D.若输入受限,进队为1234,出队可以得到1234,不合题意
  若输出受限,进队后想得到1234,可以得到,不合题意

链队

实际上是一个同时带有队头指针和队尾指针的单链表。

image.png

出队:e = front->data;front = front->next;

也是先进先出,初始头尾指针在一个结点,入队时,头指针不变,尾指针指向新结点的指针域。

image.png

循环队列与链式队列的比较

image.png 队列的应用主要在层次遍历中。队列应用题:

image.png

矩阵压缩

image.png k = n*(i-1)+j-1

image.png

对称矩阵

image.png k = (i-1)(1+i-1)/2+j-1

下三角公式(i>=j) image.png 上三角i/j互换(i<j)

image.png

三角矩阵*

下三角矩阵的k和i,j的关系:

image.png i<j时,全为0.

练习*:

image.png

image.png

三对角矩阵

image.png

练习

image.png

稀疏矩阵

稀疏矩阵一般的压缩存储方式有两种:三元组和十字链表。

image.png 只需定义 int[4][3]的三元组。

练习: image.png

十字链表:

image.png

   弧结点:尾表示弧的尾结点
        头表示弧的头结点
        同头:指向和这条弧有相同头结点的点
        同尾:指向和这条弧有相同尾结点的点
        

image.png

对于矩阵:

先推Sn(所求行前面一共有多少个元素),再求所求的具体元素在该行所对应的下标,再根据一维数组的初始值判断是否减一,如:
若一维数组初始为0,则减一
若一维数组初始为1,则不变
若一维数组初始为n,则加(n-1)