二、表
2.1概念
表(线性表),是由n个同类型的元素组成的有限序列;是 数据结构里的逻辑结构的线性结构的线性表。
元素个数为表长度;n=0为空表;
抽象数据类型的定义:
ADT 线性表(List)
Data
基本运算(k为元素在表L的位置,x为L表的元素之一)
类型 | 含义 |
---|---|
ListEmpty(L) | 测试表L是否为空表 |
ListLength(L) | 测表长度 |
ListLocate(x,L) | 找元素x在表L的位置(多x情况返回到第一个x那里) |
ListRetrieve(k,L) | 找L表里k处的元素(无k,则无定义) |
ListInsert(k,x,L) | 在L表里k的位置后插入元素x(其他元素后推,无k无定义) |
ListDelete(k,L) | 删除表L里k位置上的元素(返回被删元素) |
PrintList(L) | 打印表L中的元素(按顺序) |
2.2实现表方法:
①数组
将表的元素放在数组里保存。
优点:数组是连续储存的,所以随机访问速度快(数组的首地址+下标*sizeof(结构体));
缺点:插入、删除的效率低,插入一个元素,后面的元素会总体后移。
②指针
用指针将存储表元素的单位都连接在一起。
需要用指针来表示元素之间的逻辑关系,所以,插入一个元素的时候就不至于大动干戈。
③间接寻址
刚好和数组相反。方便存储数据,不方便读数据
2.3循环链表
普通的链表(上面123)尾和头连起来。
用指针实现表的时候,表中最后一个元素所在单元的指针为空指针,如果这个空指针改为指向表首单元的指针,就使得整个列表形成一个环。(来源王晓东的《数据结构》)
2.4双链表
在链表结点处设双指针,分别指向前驱结点和后驱结点。
2.5表的搜索游标
游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力;可以指定结果中的任何位置,允许用户对指定位置的数据进行处理。(来源百度百科)
类型 | 含义 |
---|---|
IterInit(L) | 初始化搜索游标 |
IterNext(L) | 搜索游标的下一个位置 |
CurrItem(L) | 搜索游标处的元素 |
InsertCurr(x,L) | 在当前搜索游标处插入元素x |
DeleteCurr(L) | 删除当前搜索游标处元素 |
注意:在用数组实现表的搜索游标和单循环链表的搜索游标里,新增的curr数据成员,前者是记录当前的搜索游标值,后者是记录当前的搜索游标指针。