数据结构——顺序表(线性表的顺序存储结构)

定义

顺序表是用一组地址连续的存储单元依次存储线性表中的数据源元素,从而使得逻辑相邻的两个元素在物理位置上也相邻。特点是表中元素的逻辑顺序与其物理顺序相同

顺序表上基本操作的实现

结构体定义
#define MaxSize 100//定义一个整形常量
typedef struct
{
	ElemType data[MaxSize];//存放线性表中的元素
	int length;//存放线性表的长度
}Sqlist;//顺序表类型
建立顺序表
void CreatList(Sqlist *&L,ElemType a[],int n)//由a中的n个元素建立顺序表
{
	int i = 0 , k = 0;//k表示L中的元素个数,初始值为0
	L = (Sqlist * )malloc(sizeof(Sqlist));//分配存放线性表的空间
	while(i < n){		//i扫描数组a的元素
		L -> data[k] = a[i];//将元素a[i]存放到L中
		k++;
		i++;
	}
	L -> length = k;//设置L的长度k
}
初始化顺序表
void InitList(Sqlist *&L)
{
	L = (Sqlist * )malloc(sizeof(Sqlist));//分配存放线性表的空间
	L -> length = 0;//置空线性表的长度为0
}
销毁线性表
void DestroyList(Sqlist *&L)
{
	free(L);//释放L所指的顺序表空间;
}
判断线性表是否为空表
bool ListEmpty(Sqlist *L)
{
	return(L -> length = 0);
}
求线性表的长度
int ListLength(SqList *L)
{
	return(L -> length);
}
输出线性表
void DispList(SqList *L)
{
	for(int n = 0 ; i < L->length ; i++)
		printf("%d ",L->data[i]);
	printf("\n");
}
求线性表中的某个数据元素的值
bool GetElem(Sqlist *L,int i,ElemType &e)
{
	if(i < 1 || i > L->length)
		return false;//参数i错误时返回false
	e = L->data[i-1];//取元素值
	return true;//成功找到返回true
}
按元素查找
int LocateElem(Sqlist *L,ElemType)
{
	int i = 0;
	while(i < L->length && L->data[i] != e)
		i++
	if(i >= L->length)
		return 0;
	else
		return i+1;
}
插入数据元素
bool ListInsert(Sqlist *&L,int i,ElemType e)
{
	int j;
	if(i < 1 || i > L->length+1)
		return false;//参数i错误时返回false
	i--;//将顺序表的逻辑序号转化为物理序号
	for(j = L->length ; j > i ; j--)
		L->data[j] = L->data[j-1];//将data[i]及后面的元素后移一个位置
	L->data[i] = e;//插入元素e
	L->length++;//顺序表长度增1
	return true;//成功插入返回true
}
删除数据元素
bool ListInsert(Sqlist *&L,int i,ElemType e)
{
	int j;
	if(i < 1 || i > L->length)
		return false;//参数i错误时返回false
	i--;//将顺序表的逻辑序号转化为物理序号
	for(j = L->length-1 ; j > i ; j--)
		L->data[j] = L->data[j+1];//将data[i]之后的元素前移一个位置
	L->length--;//顺序表长度减1
	return true;//成功插入返回true
}
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值