线性表之一:顺序表概述特点以及基本操作

线性表概述:

特点:
一种逻辑结构,
元素具有相同数据类型,
元素具有逻辑上的顺序性,
元素具有抽象性,
有限序列

第一个元素叫表头元素,最有一个元素叫表尾元素。
除表尾元素都有一个后继节点。

线性表九种基本操作:
InitList(&L);初始化表(空的)
DestroyList(&L);销毁操作
LocateElem(L,e);按值查找
GetElem(L,i);按位查找
ListInsert(&L,i,e);插入操作(前插)
ListDelete(&L,i,&e);删除操作(返回删除的元素e)
PrintList(L);输出操作
Empty(L);判空操作
Length(L);求表长

顺序表概述:

特点:
逻辑结构相邻,物理结构也相邻
通常数组实现。
但是数组不可以增加,顺序表可以增加
数组可多维,顺序表不可以
sizeof(ElemType)求该顺序表所存放的数据元素类型的存储空间有多大
在这里插入图片描述
n代表顺序表中的最后一个元素
MaxSize代表数组中的最有一个存储单元
设顺序表中第一个元素的内存地址为LOC(A),
则第二个元素内存地址是LOC(A)+sizeof(ElemType)
【sizeof(ElemType)是第一个元素所占用的空间】

//数组静态分配
#define MaxSize 50
typedef struct{
ElemType data[MaxSize]; //数组大小
int length; //顺序表长度
}SqList;

//数组动态分配
#define MaxSize 50
typedef struct{
ElemType *data;//指针
//【存放一个存储单元的地址,需要不断分配空间】
int length;
}SqList;

//动态分配空间语句
//C
 L.data=(Elemtype*)malloc(sizeof(ElemType)*InitSize);
 //C++
 L.data=new ElemType[InitSize];  

顺序表基本操作

1.插入操作:(前插法)
bool ListInsert(SqList &L,int i,ElemType e)
//使用引用类型L是因为在函数体内操作是作用到局部变量上,如果不用引用类型,不能把插入操作真正作用到传入的顺序表上
{
if(i<1||i>L.length+1)
return false;
if(L.length>=MaxSize)//查看数组是否满
return false;
for(int j=L.length;j>=i;j--)
  L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return true;
}
2.删除操作:
bool ListDelete(SqList &L,int i,ElemType &e){
if(i<1||i>L.length)
return false;
e=L.data[i-1];
for(int j=i;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
return true;
}
3.按值查找:
int LocateElem(SqList L,ElemType e){
int i;
for(i=0;i<L.length;i++)
   if(L.data[i]==e)
     return i+1;
return 0;
}

小结:三种操作的最好时间复杂度都为O(1),最坏时间复杂度都为O(n).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值