对于线性表,栈与队列,串的读书笔记《大话数据结构》

来源:互联网 发布:超级基因优化液萧若雨 编辑:程序博客网 时间:2024/06/18 17:34

1 线性表

1.1线性表的定义

线性表:零个或多个数据元素的有限序列

线性表是数据结构中最常用和最简单的一种结构

在较复杂的线性表中,一个数据元素可以有若干的数据项组成

线性表的顺序存储结构:指的是用一段地址连续的存储单元一次存储线性表的数据元素。

1.2线性表的存储结构

1.2.1顺序存储结构

顺序存储的三个属性:存储空间的起始位置

                     线性表的最大存储容量

                     线性表的当前长度

了解线性表顺序存储结构的“增”,“删”,“改”,“查”。

线性表顺序存储结构的存入和读出,时间复杂度都是O(1);

线性表的插入和删除,时间复杂度都是O(n);

时间的复杂度决定了线性表顺序存储结构比较适合元素个数不太变化,而更多是存取诗句的应用。

优点:

1.无须为表示表中元素之间的逻辑关系而增加额外的存储空间

       2.可以快速的存取表中任意位置的元素

缺点:

1. 插入和删除操作需要移动大量元素

2. 当线性表长度变化较大时,难以确定存储空间的容量

3. 造成存储空间的碎片

1.2.2链式存储结构

链式存储结构解决了顺序存储结构插入和删除时需要移动大量元素。

顺序存储结构之所以有这个缺点的原因是在于相邻两元素的存储位置也具有邻居关系。在内存中的位置是挨着的中间没有空隙,当然就无法快速介入。

链式存储结构采用的是不考虑元素之间的相邻位置,在第一个元素时知道第二个元素的位置,依次类推,所有的元素就可以通过遍历得到。

在之前的顺序存储结构中,每个数据元素只需要存数据元素信息就可以了,现在要存数据元素信息之外,还要存储它后继元素的地址。因此我们把存储数据元素的域称为数据域,把存储直接后继元素的域称为指针域,指针域中存储的信息称作指针或链。这两部分组成元素的存储映像,称为结点(Node)。

对于线性表来说,总要有头有尾,我们把链表中第一个结点的存储位置焦作头指针,那么整个链表的存取就必须从头指针开始进行了,之后的每一个结点,其实就是上一个后继指针指向的位置,最后一个结点意味着后继不存在,所以我们规定线性链表的最后一个结点指针为空(通常用NULL或 ^ 符号表示)。

头结点是有时我们为了更加方便对链表进行操作。头结点的数据域可以为空(不是必须存在)有时候可以用来存放链表的长度。

理解和实现单循环链表,双循环链表

 

 

2 栈与队列

2.1栈与队列的定义

栈是限定仅在表尾进行插入和删除操作的线性表。

队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表

2.2栈

栈是线性表的特例,栈的顺序存储其实也是线性表顺序存储的简化。

了解两栈共享空间。

了解栈的顺序存储结构和链式存储结构

栈关于递归的应用

通过栈对于四则运算表达式的计算了解栈的应用。在此基础上应该先了解中缀表达式转化为后缀表达式。

2.3队列

队列是一种先进先出的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。

队列可以由数组和链式结构实现。

2.3.1循环队列

理解假溢出,循环队列的定义。

为避免假溢出的出现,可以定义头尾相接的队列即循环队列。

但循环队列也存在一个实现的问题,及如何判断队列为空或满。

方法一:设置标志变量

方法二:当队列空的时候,条件为front指针==rear指针,满的时候,我们修改其条件,保留一个元素空间,也就是说,队列满的时候,数组还有一个空闲单位,但是在此方法下,由于

此种情况下由于rear可能比front大,也可能小,尽管它们只差一个位置就是满的情况下,但是可能相差整整一圈,因此通用的计算队列长度的公式为

(rear – front + QueueSize)%QueueSize

 

3 串

3.1串的定义

串是由零个或多个字符组成的有限序列,又名字符串。

了解空格串,子串,主串,串的比较。

3.2串的存储结构

3.2.1串的顺序存储结构

串的顺序存储结构使用一组地址连续的存储单元来存储串中的字符序列的,按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区,一般是用定长数组来定义。

3.2.2串的链式存储结构

串的链式存储结构,与线性表是相似的,但是由于串结构的特殊性,结构中的每个数据元素都是一个字符,如果也简单的应用链表存储串值,一个结点对应一个字符,就会存在很大的空间浪费。因此,一个结点可以存放一个字符,也可以考虑存放多个字符,最后一个结点若是未被占满,可以用“#”或其他非串值补全,当然,一个结点存放多少个字符才合适就变得非常重要,这会直接影响到串处理的效率,需要根据实际情况做出选择。但串的链式结构除了在连接串与串操作时有一定方便之外,总的来说,不如串的顺序存储结构灵活,性能也不如说讯存储结构好

3.2.3串的匹配

串的朴素匹配效率比较低下,这里推荐KMP匹配算法。

阅读全文
0 0
原创粉丝点击