转上一节:
http://t.csdnimg.cn/M9Zdphttp://t.csdnimg.cn/M9Zdp
课程内容提要:

5:知识点考点详解
5.1:线性结构
考点1:线性表
1:线性表
顺序表:数据在内存中紧邻。

(1)顺序存储方式:数组的内存是连续分配的,并且是静态分配的,即在使用数组之前需要分配固
定大小的空间。

(2)链表(linked-list)存储方式:链表的内存是不连续的,前一个元素存储地址的下一个地址中存
储的不一定是下一个元素。链表通过一个指向下一个元素地址的引用将链表中的所有元素串起来。
链表:
头指针:指向头结点的指针变量。
头结点:首结点之前的那个结点,存放链表首地址。
首结点:第一个有效结点。
尾结点:最后一个有效结点。
尾指针:指向尾结点的指针变量。

特点:
①n个结点离散分布,彼此通过指针相联系。
②除头结点和尾结点外,每个结点只有一个前趋结点和一 一个后继结点。头结点没有前趋结点,
尾结点没有后继结点。
③头结点并不存放有效数据,只存放链表首地址。其头结点的数据类型和首结点类型一样。
④加头结点的目的是方便对链表的操作,比如在链表头部进行结点的删除、插入。
链表的每个结点实际上是- -个结构体变量,它由若干成员组成,包括数据部分和存地址的指针变
量。例如:
struct student
{
long num;
float score;
struct student *next;
};
其中:next是成员名,是指针类型,
它指向struct student数据类型。

[链表的分类]
单链表

循环链表

[链表的基本操作]
单链表删除结点

单链表插入结点

双向链表删除结点

双向链表插入结点

线性表--顺序存储与链式存储对比

考点2:栈与队列

思考:元素按照a、b、c的次序进入栈,请尝试写出其所有可能的出栈序列。

队空条件: head=tail
队满条件: (tail+ 1)%size=head
队列长度: (tail-head+size)%size
循环队列的优点:
元素入队时只修改队尾指针,元素出队时只修改队头指针。
考点3:串
串的定义:是仅由字符构成的有限序列,是-种线性表。- 般记为S=aja...an',其中,S是串名,单引
号括起来的字符序列是串值。
串的存储
(1)顺序存储
(2)链式存储
串的几个基本概念
(1)空串与空格串
●空串:长度为零,不包含任何字符。
●空格串:由-个或多个空格组成的串。虽然空格是一个空白字符,但它也是一一个字符,在计算串
长度时要将其计算在内。
(2)子串与子序列
●子串:由串中任意长度的连续字符构成的序列称为子串。含有子串的串称为主串。子串在主串中的
位置是指子串首次出现时,该子串的第一个字符在主串中的位置。空串是任意串的子串。
●子序列:一个串的"子序列"(subsequence) 是将这个串中的一些字符提取出来得到一个新串,并且
不改变它们的相对位置关系。
(3)串比较与串相等
●串比较:两个串比较大小时以字符的ASCII码值(或其他字符编码集合)作为依据。实质上,比较操作
是从两个字符串的第一个字符开始进行,字符的码值大者所在的串为大;若其中-一个串先结束,则以
串长较大者为大。
●串相等:指两个串长度相等且对应序号的字符也相同。
1.串的基本操作:
(1)赋值操作StrAssign(s,t):将串s的值赋给串t。
(2)连接操作Concat(s,t):将串t接续在串s的尾部,形成-个新的串。
(3)求串长StrLength(s):返回串s的长度。
(4)串比较StrCompare(s,t):比较两个串的大小。返回值-1、0和1分别表示st三种情况。
(5)子串SubString(s, start,len):返回串S中从start开始的、长度为len的字符序列。
2:模式匹配
模式匹配:子串的定位操作通常称为串的模式匹配。(子串也称为模 式串)
朴素的模式匹配算法(布鲁特-福斯算法) :其基本思想是从主串的第一个字符起与模式串的第一个字
符比较, 若相等,则继续逐一对字符进行后续的比较,否则从主串第二个字符起与模式串的第一个
字符重新比较,直到模式串中每个字符依次与主串中-个连续的字符序列相等时为止,此时称为匹
配成功。如果不能在主串中找到与模式串相同的子串,则匹配失败。
5.2:数组与矩阵
考点一:数组

注:下标一般从0开始。
已知5行5列的二维数组a中的各元素占两个字节,求元素a[2][3]按行优先存储的存储地址?

考点二:矩阵

稀疏矩阵的表示形式:三元组表(行号,列号,元素值),例:(1,1,5) ,(1,2,10) 等。
三元组表的顺序存储结构称为三元组顺序表,常用的三元组表的链式存储结构是十字链表。

A[i]lj]
上三角元素A[i][j](i<=j)
下三角元素A[i][j](i>=j))