《数据结构与算法 C语言版》—— 2.1线性表的定义

2.1线性表的定义

2.1.1线性表的概念

线性表是一种线性结构。简言之,一个线性表是由n个数据元素构成的有限序列。线性表中的数据元素可以是一个数或一个字符,也可以是由若干数据项组成的记录,甚至可以是更复杂的信息。也就是说,线性表中的数据元素可以是任意类型的,但必须是相同类型的。
通常将n个数据元素构成的线性表记为:(a1,a2,…,ai-1,ai,ai+1,…,an)。其中,n称为线性表的表长,当n=0时称为空表。线性表中的数据元素之间存在着顺序关系,其中ai-1是ai的前驱,ai是ai-1的后继(i=2,3,…,n),i称为数据元素ai在线性表中的位序。
在实际应用中,线性表的例子是很多的。例如,26个字母组成的字母表:
(A,B,…,Z)

是一个线性表,其中的数据元素是单个字母。又如学生信息表,如表2.1所示。其中每个数据元素是由姓名、学号、性别、年龄、班级等数据项组成的记录。

2.1.2线性表的抽象数据类型定义

抽象数据类型是指一个数据结构及其上的一组操作。数据结构的操作是定义在逻辑结构层次上的,而操作的具体实现是建立在存储结构上的,因此线性表的基本操作作为逻辑结构的一部分定义在抽象数据类型中,每个操作的具体实现只有在确定了线性表的存储结构之后才能完成。线性表的长度可以根据需要增长或缩短,即对线性表的数据元素不仅可以进行访问,还可以进行插入和删除等。
线性表的抽象数据类型定义如下:

ADT List{
数据对象:D={ai|ai∈ElemSet,i=1,2, …,n,n≥0}
数据关系:R1={|ai-1,ai∈D,i=2,…,n}
基本操作:
InitList(&L)
初始条件:线性表L不存在。
操作结果:构造一个空的线性表L。
CreateList(&L)
初始条件:线性表L为空表。
操作结果:建立一个含有n个元素的线性表L。
ListEmpty(L)
初始条件:线性表L已存在。
操作结果:若L为空表,则返回TRUE,否则返回FALSE。
ListLength(L)
初始条件:线性表L已存在。
操作结果:返回L中元素的个数。
GetElem(L,i,&e)
初始条件:线性表L已存在,且1≤i≤ListLength(L)。
操作结果:用e返回L中第i个元素的值。
LocateElem(L,e)
初始条件:线性表L已存在,e为给定值。
操作结果:返回L中指向元素值为e的第1个结点的指针。若这样的元素不存在,则返回空指针。
DispList(L)
初始条件:线性表L已存在。
操作结果:依次输出L中的每个元素。
DestroyList(&L)
初始条件:线性表L已存在。
操作结果:销毁线性表L。
ListInsert(&L,i,e)
初始条件:线性表L已存在,且1≤i≤LengthList(L)+1。
操作结果:在L的第i个元素之前插入新的元素e,L的长度增1。
ListDelete(&L,i,&e)
初始条件:线性表L已存在且非空,1≤i≤LengthList(L)。
操作结果:删除L的第i个元素,并用e返回其值,L的长度减1。
}ADT List

需要指出的是,以上线性表的抽象数据类型定义中的操作不是它的全部,只是一些常用的基本操作。可以利用上述基本操作实现其他更复杂的操作。这些基本操作要在确定了存储结构之后才能实现。
为了讨论方便,如无特别说明,本章假定ElemType为int类型,使用如下自定义类型语句定义:

typedef int ElemType;

时间: 2024-10-29 18:42:09

《数据结构与算法 C语言版》—— 2.1线性表的定义的相关文章

《数据结构与算法 C语言版》—— 3.8习题

前言 "数据结构"是计算机程序设计的重要理论技术基础,是计算机学科的核心课程,也是计算机专业考研的必考课程,同时已成为其他理工科专业的热门课程.学好该课程,不仅对学习后续算法设计.数值分析.操作系统.编译原理等课程有很大帮助,而且在实际中有广泛的用途. 数据结构主要研究数据的各种组织形式以及建立在这些结构之上的各种运算的实现.它不仅为用计算机语言进行程序设计提供了方法性的理论指导,还在一个更高的层次上总结了程序设计的常用方法和常用技巧. "数据结构"课程的特点是概念

《数据结构与算法 C语言版》—— 3.1栈

3.1栈 3.1.1栈的抽象数据类型定义 栈(stack)是限定仅在表尾进行插入或删除操作的线性表.表尾端称为栈顶,表头端称为栈底.不含元素的栈称为空栈.由于后进栈的元素先出栈,所以栈又称为后进先出(Last In First Out,LIFO)的线性表. 在日常生活中,有很多后进先出的例子.例如,铁路调度站火车的进出是后进先出,人们脱衣服是后穿先脱等.在程序设计中,也常用栈这样的数据结构,实现与保存数据相反的顺序来使用这些数据. 栈的操作有栈的初始化.判空.进栈.出栈及取栈顶元素等.下面给出栈

《数据结构与算法 C语言版》—— 2.6小结

2.6小结 线性表是整个数据结构课程的重要基础,本章的主要内容如下.一个线性表是由n个数据元素构成的有限序列,其特点是数据元素之间存在着线性关系.在计算机中表示这种关系的两种不同的存储结构是顺序存储结构(顺序表)和链式存储结构(链表).1顺序表顺序表是在内存中用一组地址连续的存储单元依次存储线性表的数据元素,借助数组来实现.顺序表中数据元素之间的逻辑关系通过其"存储位置相邻"来表示.对于顺序表,主要有初始化.建立.销毁.插入.删除.按值查找等基本操作.插入和删除操作约需移动一半的元素

《数据结构与算法 C语言版》—— 2.3线性表的链式表示与实现

2.3线性表的链式表示与实现 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单.直观的公式来表示.然而,从另一方面来看,这个特点也造成了这种存储结构的弱点:在作插入或删除操作时,需移动大量元素.本节我们将讨论线性表的另一种表示方法--链式存储结构,其特点是用一组地址任意的存储单元存储线性表中的数据元素.由于它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构所具有的弱点,但同时也失去了顺序表随机存取的特点

《数据结构与算法 C语言版》—— 3.7小结

3.7小结 本章介绍了两种特殊的线性表:栈和队列,主要内容如下. (1)栈 栈是限定仅在表尾(栈顶)进行插入(进栈)或删除(出栈)的线性表,又称后进先出的线性表.栈有两种存储表示:顺序表示(顺序栈)和链式表示(链栈). 栈的主要操作是进栈和出栈. 对于顺序栈的进栈和出栈要注意判断栈满或栈空,栈满和栈空的条件与栈顶指针的指向有关.本书中栈顶指针指向栈顶元素,栈满的条件是Stop>=Sstacksize-1,栈空的条件是Stop=-1.有的教材中栈顶指针指向栈顶的下一个元素时,栈满和栈空的条件

《数据结构与算法 C语言版》—— 2.2线性表的顺序表示与实现

2.2线性表的顺序表示与实现 2.2.1线性表的顺序表示 线性表的顺序存储是指在内存中用一组地址连续的存储单元依次存储线性表的数据元素,用这种存储方式存储的线性表称为顺序表.顺序表中数据元素之间的逻辑关系通过其"存储位置相邻"来表示,如图21所示. 如果顺序表的数据元素是按照递增或递减顺序存放的,则称其为有序顺序表.假设线性表的每个数据元素需占用l个存储单元,其第一个元素的存储地址,即数组的基地址记为LOC(a1),则线性表中第i个数据元素的存储地址LOC(ai)为LOC(ai)=L

《数据结构与算法 C语言版》—— 第3章 栈 与 队 列

第3章 栈 与 队 列 栈和队列是在软件设计中常用的两种数据结构,它们的逻辑结构与线性表相同.其特点在于操作受到了限制:栈按"后进先出"的规则进行操作,队列按"先进先出"的规则进行操作.故称它们为操作受限制的线性表.

《数据结构与算法 C语言版》—— 2.7习题

2.7习题 1描述头指针.头结点.首元结点的区别,并说明头指针和头结点的作用. 2在顺序表中插入和删除一个结点需平均移动多少个元素?具体的移动次数取决于哪两个因素? 3在单链表和双向链表中,从当前结点出发是否能访问到任何一个结点? 4若较频繁地对一个线性表进行插入和删除操作,该线性表宜采用何种存储结构?为什么? 5有线性表(a1,a2,-,ai-1,ai,ai+1,-,an),采用单链表存储,头指针为H,每个结点中存放线性表中的一个元素,现查找某个元素值为x的结点.分别写出下面三种情况

《数据结构与算法 C语言版》—— 第2章 线性表

第2章 线性表 线性结构是一种最简单.最基本,也是最常用的数据结构.线性结构的特点是数据元素之间是一种线性关系,即在数据元素的非空集合中:1)存在唯一的一个被称为"第一个"的数据元素:2)存在唯一的一个被称为"最后一个"的数据元素:3)除最后一个元素外,集合中每个数据元素均有唯一的后继:4)除第一个元素之外,集合中每个数据元素均有唯一的前驱.