线性表:
简介:
线性表是最基本、最简单、也是最常用的一种数据结构。
线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了首位结点)。
我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。
在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。
线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。
定义:
线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。数据元素是一个抽象的符号,其具体含义在不同的情况下一般不同。
在稍复杂的线性表中,一个数据元素可由多个数据项(item)组成,此种情况下常把数据元素称为记录(record),含有大量记录的线性表又称文件(file)。
线性表中的个数n定义为线性表的长度,n=0时称为空表。在非空表中每个数据元素都有一个确定的位置,如用ai表示数据元素,则i称为数据元素ai在线性表中的位序。
线性表的相邻元素之间存在着序偶关系。如用(a1,…,ai-1,ai,ai+1,…,an)表示一个顺序表,则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,…,n-1时,ai有且仅有一个直接后继,当i=2,3,…,n时,ai有且仅有一个直接前驱。
特征:
- 集合中必存在唯一的一个“第一元素”。
- 集合中必存在唯一的一个 “最后元素” 。
- 除最后一个元素之外,均有 唯一的后继(后件)。
- 除第一个元素之外,均有 唯一的前驱(前件)。
基本操作:
MakeEmpty(L) 这是一个将L变为空表的方法
Length(L) 返回表L的长度,即表中元素个数
Get(L,i) 这是一个函数,函数值为L中位置i处的元素(1≤i≤n)
Prior(L,i) 取i的前驱元素
Next(L,i) 取i的后继元素
Locate(L,x) 这是一个函数,函数值为元素x在L中的位置
Insert(L,i,x)在表L的位置i处插入元素x,将原占据位置i的元素及后面的元素都向后推一个位置
Delete(L,p) 从表L中删除位置p处的元素
IsEmpty(L) 如果表L为空表(长度为0)则返回true,否则返回false
Clear(L)清除所有元素
Init(L)同第一个,初始化线性表为空
Traverse(L)遍历输出所有元素
Find(L,x)查找并返回元素
Update(L,x)修改元素
Sort(L)对所有元素重新按给定的条件排序
strstr(string1,string2)用于字符数组的求string1中出现string2的首地址
顺序表的定义:
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
顺序表的表示与实现:
base.h:
这个头文件主要用来存放公用的常量和类型。
1 | //base.h |
sqList.h:
aqList.h头文件用来具体实体实现各函数。
1 | //sqList.h |
main.cpp:
用来测试上面的函数。
1 |
|