复习:线性表——顺序表

线性表:相同特性的数据元素的一个有限序列。
线性表的长度:n 序列中所含元素个数
空表:不包含任何元素
前驱:ai-1是ai的前驱
后继:ai+1是ai的后继
表头元素:a1
表尾元素:an

线性表 元素之间一对一的线性结构
表内元素可以用二元组表示L=(D,R)
D是元素的存储方式
R是元素之间前驱后继的关系

ADT
数据对象 存储方式、格式
数据关系 元素之间的前驱后继关系
数据操作 (1)初始化:构造一个空表
(2)销毁:释放线性表的内存空间
(3)判断表是否为空:若为空则返回为真否则为假
(4)求线性表长度:返回L中元素个数
(5)输出线性表:当L不为空时,顺序的显示L中各个节点的值域
(6)求线性表中指定位置的元素:用e返回L中第i个元素
(7)查找线性表中的元素:返回L中第1个与e相等的序号,找不到则返回0
(8)插入元素:在L中的第i个位置插入元素
(9)删除元素:在L中的第i个位置删除元素

进阶:线性表的合并
LC<-LA
LC<-存在于LB但在LA中不存在的元素

顺序存储结构——顺序表
:把线性表中的所有元素按照其逻辑顺序依次存储到从计算机存储器中指定存储位置开始的一块连续的存储空间中。
解决方式——数组
定义MAXSIZE 预留一些冗余空间
占用空间:n*sizeof(elemtype)
线性表长度:n

线性表:逻辑结构
顺序表:存储结构 内存中是连续的

具体解决问题时:结构体的嵌套

顺序表存储:
data域%length域

物理序号:从0开始
逻辑序号:从1开始

指针法
(1)定义指针类型 Sqlist *L
(2)对指针分配空间 ,必须分配空间否则就是野指针 L=malloc(..);
(3)操作定义结构体中的元素时用-> 如L->length

变量法
(1)直接定义变量
(2)操作结构体中元素时用.进行操作 如 L.length

线性表实现及其CODE

定义

(1)定义data域 //注意定义时需要在
(2)定义length域

创建线性表:

(1)首先为变量分配空间 有空间去存储数据
(2)将数据赋值给传入的线性表的data域中
(3)为线性表的length域赋值

初始化线性表

(1)new或者malloc 分配内存空间
(2)为length赋0

销毁线性表

malloc - free
new - delete[]

判断是否为空表

bool 判断length是否为0

求线性表长度

返回length即可

输出线性表

当线性表不为空时,顺序的显示L中各个元素的值

求某个位置的数据元素值

返回L中第i(1<=i<=length)个元素的值,放在e中

按元素值查找其位置

查找第一个值域与e相等的元素的逻辑位序。

插入元素

在顺序表上第i个位置上插入新的元素e
(1)将顺序表原来的第i个及其以后的元素后移一个位置
(2)将新元素插入到位置i中
(3)顺序表长度+1

删除元素

(1)将线性表第i个元素以后的元素均向前移动一个位置,覆盖第i个元素,达到删除该元素的目的
(2)顺序表长度减一

*注意逻辑位序转化为物理位序

include

include

define MAXSIZE 1000

//定义顺序表
typedef struct
{
//data域
int data[MAXSIZE];
//length域
int length;

}Sqlist;

//创建线性表
void CreateList(Sqlist *&L,int a[],int n)
{
int i;
L=new Sqlist;
//L->name=”link”;
L->length=n;
for(i=0;i

猜你喜欢

转载自blog.csdn.net/weixin_38195506/article/details/80808050