您的位置:首页 > 理论基础 > 数据结构算法

[考研系列之数据结构]线性表概述

2014-05-28 22:42 369 查看
1.脑图





2.表示方法

按照数据结构概述所说,线性表有两种表示方法分别是顺序表示和链式表示,链表就是链式表示的典型。

我们知道链式表示是分配了n块内存空间,可以认为彼此不连续,所以不能用偏移量去定位每个元素。

下面就先说最简单的单向链表:

如果每个数据元素能有一个指针指向下一个元素的话,那么只需要知道第一个数据元素就能一个一个的遍历整个链表了,这就是单向链表。

对于每个链表元素我们称之为节点,每个节点都有两个域:数据域&指针域

数据域就是数据元素所在的区域,而指针域则是存储指向另一个节点的指针的区域。

对于单向链表,它的指针域有一个指针指向下一个节点的内存地址。

需要注意的是:

头节点指向表中第一个节点,它本身的数据域不带数据,所以判断链表NULL的方法是判断头结点的指针是否为空。

最后一个节点的指针应指向NULL。

对于单向链表,它有一个问题。那就是当你获取链表中第n个元素(n>1)时,想获取它的上一个指针,需要重新遍历一遍链表,算法复杂度O(n)。为了应对这个问题,我们引入了双向链表。

双向链表

单向链表每个结点的指针域只有一个指向下一个结点的指针,现在在上面加上一个指向前一个结点的指针就变成了双向链表。这样,要寻找前一个结点只需要O(1)就可以了。

还有一类形式的链表,就是循环链表

它在单向链表上做了一点小改动,在单向链表中最后一个结点的指针是指向NULL的,可是循环链表中最后一个结点的指针是指向第一个结点的。

3.栈和队列

栈和队列都是特殊的线性表,因为他们的操作集合是小于完整的线性表的,它们在线性表之上加上了限制条件。



栈最大的特征就是LIFO(Last
In First Out),也就是后入先出。最后入栈的元素最先出栈。

队列

队列最大的特征和栈相反,是FIFO(First
In First Out),也就是先入先出。最先入队的元素最先出队。

4.字符串

字符串是一类特别的线性表,它的所有元素都是单个字符,针对字符串,最重要的就是寻找子串也就是字符串匹配算法了,后面会涉及。

5.数组

学过C/C++的人都会无比熟悉,也不废话了。进阶是二维数组也就是矩阵,这个会有一些要点。

6.广义表

广义表就是线性表的扩展,我们知道线性表所有的元素都是同类的,但是广义表可以使得每个元素都是不同类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: