数据结构学习笔记(持续更新)
一.绪论##
1 什么是数据结构
数据结构,直白地理解,就是研究数据的存储方式
数据结构是一门学科,它教会我们“如何存储具有复杂关系的数据更有助于后期对数据的再利用”。
2 数据结构学什么
数据结构是学习数据存储方式的一门学科,数据结构大致包含以下几种存储结构:
1.线性表:还可细分为顺序表、链表、栈和队列
2.树结构:包括普通树,二叉树,线索二叉树等
3.图存储结构
3数据的逻辑结构和存储结构
数据结构教我们有效地存储数据,既要存储数据本身,还要存储数据之间的关系。
存储数据本身,也就是将数据存储到内存里。数据在内存中的存储状态,就称为数据的存储结构,也叫物理结构。
数据结构中,将数据之间的关系称为数据的逻辑结构。
在内存中,数据的存储结构无非有以下两种情况:1.集中储存:所有数据存储在一整块内存空间中,数据之间紧挨着存放 2.分散储存:各个数据随机存储在内存空间中
二.线性表##
线性表的定义:线性表是具有相同数据类型的n个数据元素的有限序列。n为表长,当n = 0时,为空表。 线性表公式表示:L = (a1,a2,a3.......an), a1 为表头元素,an为表尾元素。除了第一个元素,每个元素都有且仅有一个直接前驱,除了最后一个元素,每个元素有且仅有一个直接后继。 线性表的特点:有限个数;逻辑上有顺序性;每个表元素都是单个元素;表元素类型皆相同;元素具有抽象性。
线性表与链表/顺序表之间的区别:线性表是一种逻辑结构,表示元素之间一一对应的关系;链表和顺序表指的是存储结构。 在计算机内,可以用不同的方式来表示线性表,最简单最常用的方式是顺序存储结构—顺序表,而链表则经常被用来表示非线性的数据结构,也是一种常用的表示线性表的方法。
顺序表:线性表的顺序存储被称为顺序表,它是一组地址连续的顺序存储单元,依次存储线性表中的数据元素。注意顺序存储是一种读写方式,不是存储方式,有别于顺序存储。线性表支持随机存取的顺序存储结构。
顺序表的优点:1:存储密度高;2:元素可以随机读取;3:存储位置可以简单的使用公式来表示。(补充:当主要操作为查找时,选用顺序表比较好)
链表:由于顺序表的插入删除元素操作需要移动大量的元素,影响运行效率,所以引入了链式存储,链式存储通过“链”建立起数据元素之间的逻辑关系,只需要修改指针进行插入、删除操作。分为单链表和双链表。
链表的优点:1:适合随机的插入和删除操作;2:存储空间大小不需要提前设定;3:可以进行动态存储。(补充:当主要操作为插入,删除时,选用链表比较好)
顺序表和链表的比较:
1:存取,链表只能从表头开始顺序存取元素;顺序表可以随机存取
2:存储方式,顺序表相邻存储;链表物理存储位置不一定相邻,其逻辑关系是通过指针来链接的
3:顺序表在静态分配时,不可改变内存大小,可能会造成溢出,动态分配时,插入和删除需要移动大量的元素,效率很低。但链表只在需要的时候申请内存,操作灵活 单链表:线性表的链式存储称为单链表,它不是连续的存储空间,元素之间是通过指针进行联系。我们通常使用“头指针”来标识一个单链表,当头指针为“NULL”时表示一个空表,此外,为了操作上的方便,在单链表第一个结点之前附加一个结点,称之为“头结点”,头结点的数据域可以不设任何信息,也可以记录表长等相关信息。但是不管带不带头结点,头指针始终指向链表的第一个结点。注意头结点不计入表长。 特点:非随机存取,不能直接从表中找到特定的结点,需要从表头开始遍历,依次查找 双链表:单链表结点中只有一个指向其后继的指针,这使得单链表只能从头到尾依次顺序的向后遍历,若要访问某个结点的前驱,只能从头开始遍历,访问后继结点的时间复杂度为O(1),访问前驱结点的时间复杂度为O(n);为克服以上缺点,引入双链表,一个结点含有两个指针,分别指向其前驱结点和后继结点。
线性表按照存储方式可分为顺序表和链表。
(1)顺序表。将数据元素放到一块连续的内存空间,相邻数据元素存储地址也相邻。
1)优点:通过下标就可访问元素,因此存取效率高。
2)缺点:需预分配空间,分配多了会造成浪费,分配少了会造成“溢出”,因此空间利用率低;插入和删除元素需移动元素,因此插入删除慢。
3)时间复杂度:访问元素是O(1),插入删除元素是O(n)。
(2)链表。相邻数据元素的地址可能不相邻。每个数据元素所占存储空间分成两部分,一部分存放元素值,一部分存放元素之间的关系。
1)优点:存储空间是动态分配的,因此没有空间限制;插入和删除元素只需要改变指针指向,因此插入删除快。
2)缺点:访问元素需要从开始元素一个一个去查找访问,因此存取效率低。
3)时间复杂度:访问元素是O(n),插入元素是O(1)。
为什么说顺序存储结构是随机存取的?
答:因为顺序存储结构存储的数据是一个挨着一个,是相邻的,也就是说访问任何一个元素的时间是相同的,因为指定了位置,比如说我要取第3个数据,我直接取序号2的的地方拿,不用说又要从0,1,到2这样就行了,所以时间复杂度是O(1),所以说是随机存取
问答题:
一、线性表的两种存储结构各有哪些优缺点?
答:线性表的两种存储结构分别是:顺序存储结构和链式存储结构。顺序存储结构的优点:可以直接存取数据元素,方便灵活,效率高,但插入,和删除需要移动大量的数据元素。因而减低效率;而链式存储结构中采用动态分配,利用率较高,但需增设指示节点之间关系的指针域,存取数据元素不如顺序存储方便,但节点的插入,删除较简单。
二、对于线性表的两种存储结构,若线性表的总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素应选用那种存储结构?是说明理由?
答:应选用顺序存储结构,因为每个数据元素的存储位置和线性表的起始位置相差一个和数据元素在线性表中的序号成正比的常数。因此,只要确定了其起始位置,线性表中的任一个数据元素都可随机存取,因此,线性表的顺序存储结构是一种随机存取的存储结构,而链表则是种顺序存取的存储结构。
三、对于一个头指针为L的带头结点的单链表,判定链表为空表的条件是(L->next==NULL;)
不带头结点的单链表head为空的判定条件是(head==NULL )
解释:带头节点的情况下,链表空时还会存在一个节点,所以head不为空,head->next为空 。不带头节点的情况下,链表空时,没有任何节点,head指向null。
本文来自博客园,作者:0x1ang==,转载请注明原文链接:https://www.cnblogs.com/0x1ang/p/16573587.html


浙公网安备 33010602011771号