数据结构:线性表之顺序表

在这里插入图片描述

前言

线性表是最常用的一种数据结构,通过元素的线性关系描述元素与元素之间的关系,除了首元素和末尾元素,每个元素都有一个直接前驱和直接后继。元素的类型必须保持相同。

线性表的存储结构

  1. 顺序存储:把元素放在地址连续的存储单元中,数据集的逻辑关系和物理关系一一对饮。
  2. 链式存储:地址空间不连续,也就是逻辑上连续,物理上不连续,只支持顺序访问,不支持随机访问。
  3. 索引存储:索引结构的优点是检索速度快,缺点是增加了附加的索引表,占用更多的存储空间。数据域和指针域分开存放。
  4. 散列结构:即hash表

线性表的实现方式

顺序表

1、概念:物理结构和逻辑结构一致,表中的元素按照一定的顺序存储到连续的空间中。
2、顺序表存储体结构

#define MAX_SIZE 100 //数组的最大长度
typedef int ElemType; // 数据类型的别名
typedef struct sqlist{
	ElemType data[MAX_SIZE]; //存储元素的数组
	int length; // 记录线性表的数组元素个数
}sqlist; //别名

3、顺序表的初始化

sqList *L->data = (ElemType *)malloc(sizeof(ElemType)* MAX_SIZE);

顺序表的查找算法

  1. 按值查找
int findByValue(sqList *L,int e){
	int i;
	for(i=0;i<L->length;i++){
		if(L->data==e){
			return i+1;
		}
	}
	return -1;
}

2、按序号查找

int findBySeq(sqList *L,int i){
    return L.data[i];
}

3、顺序表的插入

bool ListInsert(sqList *L,int i,int e){
	if(i<1 || i>L->length+1){
		return false;
	}
	if(L->length >= MAX_SIZE){
		retrun 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;
}

4顺序表的删除

bool deleteList(sqList *L,int i,int *e){
	if(L->length==0){
		return false;//数组为空
	}
	if(i<1 || i>L-length+1){
		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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值