第四章——数组、串与广义表
本文最后更新于104 天前,其中的信息可能已经过时,如有错误请发送邮件至 2641805259@qq.com

一、一维数组与多维数组

1. 一维数组

一维数组的每个数组元素是一个序对,由下标(index)值(value)组成。

数组的连续存储方式

2. 多维数组

二维数组的动态定义和初始化

int **A;
int row = 3, col = 3; int i, j;
A = new int* [row];
for(int i = 0; i < row; i++){
    A[i] = new int [col];
}

存储方式

  • 行优先:存好一行再存一行

  • 列优先:存好一列再存一列

三维数组

各维元素个数为

下标为的数组元素的存储地址:

二、特殊矩阵

指非零元素或零元素的分布有一定规律的矩阵:对称矩阵、三对角矩阵。

1. 对称矩阵的压缩存储

对于一个的对称阵,可以只存其上三角矩阵或下三角矩阵,存的元素数量为

  • 假设一个数组只存其下三角矩阵,行优先

    • ,则则在下三角部分,在中有储存,下标为
    • ,则在上三角部分,去找,下标为
  • 假设一个数组只存其上三角矩阵,行优先

    • ,则在上三角部分,在中有储存,下标为
    • ,则在下三角部分,去找,下标为

2. 三对角矩阵的压缩存储

三对角矩阵总共有个非零元素

在三条对角线上的元素满足:

  • 矩阵的在矩阵中的位置为

  • 若已知三对角矩阵中某元素在数组存放在第个位置,则有

  •  

三、稀疏矩阵

稀疏因子:对于矩阵个非零元素,令稀疏因子,通常若,则称矩阵为稀疏矩阵

两种表示方式:三元组表示确定了矩阵的一个非零元素、正交链表表示

1. 三元组表示

三元组中的排列应该现根据行从小到大排,再根据列从小到大排

快速转置法

建立辅助数组rowSizerowStart

2. 带行指针数组的二元组

3. 正交链表

优点:适应矩阵操作是矩阵非零元素的动态变化

表头结点:

headnext
downright

question:nextright的作用是什么?有什么区别?

非零元素结点

headrowcol
downvalueright

四、字符串

字符串是个字符的有限序列。

1. 概念

子串:串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应地称为主串

子串在主串中的位置:位置从0开始数,首次出现的首字母位置。

2. 模式匹配(KMP 算法)

在主串中寻找子串(第一个字符)在串中的位置

用一个next特征向量来确定:

当模式中第个字符与目标中相应字符失配时,模式中应当由哪个字符(设为第个)与目标中刚失配的字符重新继续进行比较

next数组的定义

next[i]表示模式串A[0]A[i]这个字串,使得前个字符等于后个字符的最大值

使

五、广义表(General Lists)

1. 概念

广义表是个表元素组成的有限序列,记作

是表名,是表元素,可以是表(称为子表),可以是数据元素(称为原子)。

是表的长度,的广义表为空表。

表头:表的第一个表元素

表尾:其他表元素组成的称为广义表的表尾(tail)

线性表:只包含原子的表

纯表:所有元素在表中仅出现一次

再入表/共享表:存在元素在在表中出现多次

2. 特性

有次序性、有深度、有长度、有共享、可递归(本身为自己的子表)

A()		// A长度为0,深度为1
B(6, 2)		// B长度为2,深度为1
C('a', (5, 3, 'x'))		// C长度为2,深度为2
D(B, C, A)		// D长度为3,深度为3

3. 表头、表尾

A()		// head(A) 和 tail(A) 不存在
B(6, 2)		// head(B) = 6, tail(B) = (2)
C('a', (5, 3, 'x'))		// head(C) = 'a', tail(C) = ((5, 3, 'x'))
D(B, C, A)		// head(D) = B, tail(D) = (C, A)

4. 广义表结点定义

utype | info | tlink

结点类型utype

  • 0, 表头
  • 1, 原子数据
  • 2, 子表

信息info

  • utype = 0时,存放引用计数
  • utype = 1时,存放数据值value
  • utype = 2时,存放指向子表表头的指针(hlink

尾指针tlink

  • utype = 0时,指向该表第一个结点
  • utype 0时,指向同一层下一个结点。

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇