【数据结构】第二章 线性表

学习笔记0331

第二章 线性表

2.1线性表的定义和特点

线性结构的特点:(一对一)

①只有一个首结点和尾结点;

②除首尾结点外,其他结点只有一个直接前驱和一个直接后继。

线性表的定义:

用数据元素的有限序列表示空表:n=0;

2.2案例引入

案例一:一元多项式

案例二:系数多项式

两个多项式相加【步骤】

2.3线性表的类型定义

线性表的顺序存储

线性表的链式存储

基本操作:初始化、取值、查找、插入、删除

2.4  SqList线性表的顺序表示和实现

逻辑上相邻,物理上也相邻。

用数组来实现线性表的顺序存储结构。

基地址就是每个段的起始地址

案例:图书表的顺序存储结构类型

C语言的动态分配函数( <stdlib.h> )

malloc(m) :开辟m字节长度的地址空间,并返回这段空间的首地址

sizeof(x) :计算变量x的长度

free(p) :释放指针p所指变量的存储空间,即彻底删除一个变量

补充: C+ +的动态存储分配

申请存放T类型对象的内存空间

释放指针P:

C++的参数传递

(1)值传递

(2)地址传递  * 

指针变量做参数(有交换5和7)

没有交换5和7

(3)引用类型作参数  &

交换了5和7

(4)数组名作参数

a 数组名,首地址    a = &a[0];

★  int   b[ ]    等价于    int *b;

基本操作:初始化、取值、查找、插入、删除

初始化

函数参数用  引用&

函数参数用  指针*

销毁线性表L

清空线性表L

求线性表的长度

判断线性表L是否为空

取值

查找

执行 圆圈2  是因为没有找到元素e


插入(插在第i个结点之前)

插入算法分析:

实现代码:

算法时间复杂度分析:平均移动次数AMN

在第i个元素插入,移动 n-i+1 次


删除(删除第i个结点)

插入算法时间复杂度分析

查找、插入、删除算法的平均时间复杂度 O(n);空间复杂度是O(1)。

顺序表的特点:




2.5线性表的链式表示和实现 

链式存储:结点  =  数据域 + 指针域

头指针 Head

头结点

首元结点

尾结点的指针域(NULL /Head)

单链表、双链表、循环链表

如何表示空表?

head->next = NULL;

在链表中设置头结点的好处?

头结点的数据域内装的是什么?

链表的特点? 顺序存取法

链表的优缺点

单链表的定义和实现

单链表用头指针的名字命名

单链表的存储结构定义

1.2表示的内容是一样的。都是定义一个struct LNode 的指针变量p。

相当于   struct LNode *p。



分析如下图:

初始化

函数参数用  引用&

函数参数用  指针*

销毁线性表L

清空线性表L

求线性表的长度

判断线性表L是否为空

取值

查找

need-to-insert-img

执行 圆圈2  是因为没有找到元素e

插入(插在第i个结点之前)

插入算法分析:


2.6顺序表和链表的比较

初始化(构造一个空表)

(1)销毁

(2)清空链表

先删除其他结点,再把头结点的指针域置为NULL。

(3)求表长

(4)判断表是否为空

(5)在链表中取值

分析:

算法步骤:

算法描述:

插入

算法分析

算法描述:

查找

查找成功:返回元素所在的位置

查找返回e的地址

查找返回e的位置序号

删除(画图后较容易理解)

算法分析:

算法分析:


链表——时间、空间复杂度



单链表的创建

(前插法、尾插法)

单链表的创建——前插法

算法描述

单链表的创建——尾插法

算法描述:

循环链表


最后一个结点的指针域指向头指针

(2) L -> next = L; 非空循环链表

尾结点:rear  

循环链表的合并

(1)p指向头结点【的地址】 Ta->next(存放在Ta尾结点的指针域内)(p相当于链表的头指针)

(2)Ta的尾指针(Ta->next)指向Tb的首元结点(Tb->next->next)

(3)释放删除Tb的头结点(存放在Tb->next);

(4)循环链表需要尾指针(Tb->next)指向头指针 (p)

分析心得:弄清楚  头指针、头结点、首元结点,尾结点、尾指针 的表示方式(即,存放在拿个指针域内)

1)头指针 p = Ta->next

2)头结点 Ta->next、 Tb->next

3)首元结点 Ta->next->next 、 Tb->next->next   (首元结点的地址存放在头指针Ta->next 的指针域->next 内)

4)尾结点  Ta  、Tb、rear

5)尾指针  Ta->next、Tb->next


双向链表DulNode(一个数据域+两个指针)

指针:一个指向前驱地址,一个指向后继地址

定义双向链表的抽象数据类型:

双向链表的插入


双向链表的删除

双向循环链表

尾结点d的指针域指向头结点

顺序表和链表的对比


2.7线性表的应用

线性表的合并

应用1

运用到了线性表SqList里面定义的函数(可以直接使用)


有序表的合并




有序链表的合并【真难啊】

2.8案例分析与实现

案例一:一元多项式的创建【数组表示】

案例二:稀疏多项式相加【链表】

比较指数部分,插入、删除操作

案例三:图书信息管理系统

顺序表和链表都可以实现

小总结:线性表两种存储结构——顺序表和链表


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容