2.2线性表的顺序表示(知识点)

2.2.1顺序表的定义

2.2.2顺序表的基本操作

思维导图:

顺序表的定义

静态分配

#define MaxSize 50          //宏定义线性表最大长度为50
typedef struct{             //定义一个结构体
	ElemType data{maxSize}; //顺序表的元素,数组
	int length;             //顺序表当前长度
}SqList;                    //结构体名

动态分配

#define InitSize 50         //表长度的初始定义
typedef struct{             //定义一个结构体
	ElemType *data;         //动态分配数组的指针
	int MaxSize,length;     //顺序表最大容量,当前个数
}SeqList;                    //结构体名

从上面的描述中可以看出,动态分配和静态分配最主要的区别在于静态分配的是数组,动态分配的是指针。指针存储地址,当需要用到数据存储的时候再申请空间。

 C语言动态分配语句:

L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);

C++动态分配语句:

L.data=new ElemType[InitSize];

动态分配必须有动态分配语句

顺序表的基本操作

插入:

bool ListInsert(SqList &L,int i,ElemType e){
//设置成bool类型函数,若插入成功返回true,否则返回false
	if(i<1||i>L.length+1)//判断i的范围是否有效
	return false;
	if(L.length>=MaxSize)//当前存储空间已满,不能插入
	return false;
	for(int j=L.length;j>=i;j--)//将第i个元素之后的元素后移
	L.data[j]=L.data[j-1];
	L.data[i-1]=e;           //在位置i处放入e
	L.length++;              //线性表长度加1
	return true;
}

 时间复杂度:

最好:表尾插入,时间复杂度O(1)

最坏:执行n次,时间复杂度O(n)

平均:O(n)

 

删除

bool ListDelete(SqList &L,int i,Elemtype &e){//引用e,将删除的数赋值给e
	if(i<1||i>L.length)//判断i的范围是否有效
	return false;
	e=L.data[i-1];     //将被删除的元素赋值给e
	for(int j=i;j<L.length;j++)//将i位置后的元素前移
	L.data[j-1]=L.data[j];
	L.length--;        //线性表长度减1
	return true;
}

最好:时间复杂度O(1)

最坏:时间复杂度O(n)

平均:O(n)

 

按值查找

顺序表L中查找一个元素值等于e的元素,并返回其位序

int LocateElem(SqList L,ElemType e){
	int i;
	for(i=0;i<L.length;i++)
	if(L.data[i]==e)
	return i+1;//i是数组下标,i+1是位序
	return 0;//查找失败退出循环
}

最好:时间复杂度O(1)

最坏:时间复杂度O(n)

平均:O(n)

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值