c语言dlnode *l表示,数据结构(C语言版) 高佳琴 第2章 线性表.pptx

第二章 线性表

申燕萍

2014年 2月 7日

本章要点

线性表的逻辑定义与结构特点。

线性表的顺序存储结构和链式存储结构。

顺序表上各基本操作的实现及时间复杂度的分析。

链表上各基本操作的实现及时间复杂度分析。

“学生成绩信息表”引例:学生成绩信息表可以用来存储各班学生的基本信息以及相关科目的成绩情况。在此基础上实现对各班某个学生的各科成绩的查询,以及添加或删除一些学生的成绩信息。

思考:1.如何添加和删除学生成绩信息更方便,操作效率更高?

2.如何存储更节省存储空间呢?

2.1 “学生成绩信息表”案例导入

学生成绩信息表中每位学生信息是一个数据元素,构成一个结点。由学号、姓名、性别、出生年月、数学、语文、英语成绩7个数据项组成。如图2-1所示。

图2-1学生成绩信息表

图2-1中结点之间连线表示两个结点间一对一的相邻关系。第一个结点王伟,男,1993/01,123,98,90)无直接前驱,但有一个直接后继。最后一个结点李彩霞,女,1993/05,102,113,90)有一个直接前驱,但无直接后继。中间每个结点都有一个直接前驱和一个直接后继。学生成绩信息表是典型的线性表。

又如一个星期中的七天可放在一个线性表中:

(星期一,星期二,星期三,星期四,星期五,星期六,星期日)

这也是线性表的具体实例。

线性表中的数据元素无论是单一的数值还是具有结构的记录,它可以是各种类型,但同一表中的数据元素的类型必定是相同的。

表中的一个数据元素可以由若干个数据项组成,也可以只由一个数据项组成。由若干数据项组成的数据元素又可称为记录或结点。

线性表中数据元素之间具有一对一的关系。即在数据元素的非空有限集合中,除第一个数据元素之外,集合中的每一个数据元素都只有一个前驱;除最后一个数据元素之外,集合中的每一个数据元素都只有一个后继。

分析上述两个例子,可以得出如下结论:

数据的逻辑结构分为线性结构和非线性结构两种。线性结构是最简单的数据结构,也是十分重要的一种数据结构。因为它的应用最为广泛,同时也是学习和研究其他更为复杂的层次结构和网状结构的基础。

其中线性表是最简单也最常用的一种线性结构。

2.2 线性表的定义及基本操作

线性表是由n (n≥0)个相同类型的数据元素组成的有序集合。通常记为L=(a1,a2,…,ai-1,ai,ai+1,…,an)。其中L为线性表名称,习惯用大写书写;a1称为起始结点,an 称为终端结点,ai为组成该线性表的数据元素,习惯用小写书写;i称为数据元素在线性表中的序号或位置。对于相邻一组关系< ai,ai+1>, ai称为ai+1的前驱结点,而ai+1称为ai的后继结点。

2.2.1 线性表的定义

表中数据元素的个数n(n≥0)称为线性表的长度。例如26个英文字母表是一个长度为26的线性表。当n=0 时,表中无元素,称为空表,简记为Φ。可以表示刚开始建表尚无数据的情况,或者表中元素全部被删除的情形。

线性表中每个数据元素都有一个确定的位置,这取决于它的序号。

线性表: (a1, a2, a3, … ,an-1, an)

序号: 1 2 3 n-1 n

a1是第一个数据元素,an是最后一个数据元素。除第一个和最后一个元素以外,表中任一元素ai存在唯一的直接前驱元素ai-1和唯一的直接后继元素ai+1。

线性表的特征为数据元素之间具有一对一的线性关系。归纳起来有两个要点。

要点1:线性表的逻辑结构可形式化表示成(D,R),其中D={a1,a2,…,an},R={,,……,}。

要点2:ai为序号为i的数据元素(i=1,2,…,n),通常我们将它的数据类型抽象为DataType,DataType根据具体问题而定,如在学生成绩信息表中,它是用户自定义的学生结构体类型。在字符串中,它是字符型。

下面给出线性表基本运算及功能描述。

1.InitList(L) 线性表初始化操作函数。

2.LengthList(L) 求线性表的长度。

3.GetList(L, i) 取表中位置i处的元素。

4.LocateList(L,x)按值查找函数,也称定位操作。

5.InsertList(L,i,x) 插入操作。

6.Delete(L,i) 删除操作。

7.Empty(L) 判空表函数。

8.Clear(L) 表置空操作。

2.2.2 线性表的基本操作

应用上述基本运算可以实现线性表的其他运算,如将两个线性表合并,线性表逆置等。

数据结构的运算是定义在逻辑结构层次上的,而运算的具体实现是建立在存储结构上的。每一

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值