破“顺”式

本文详细解析了顺序表这一线性数据结构的原理,包括其基地址、存储空间及元素个数的管理,并提供了初始化、增加、插入和删除元素的具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顺序表的原理

顺序表是简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以 快速定位第几个元素,中间不允许有空值;插入、删除时需要移动大量元素。

顺序表的三个要素:
① 基地址
② 分配一段连续的存储空间 (实际的存储空间大小)
③记录实际的元素个数(即顺序表的长度)

在这里插入图片描述

//顺序表结构体定义
#define MAX_SIZE 100 
typedef  int  ElemType;

struct _SqList{ 
	ElemType *elems; // 顺序表的基地址 
	int length; 	 // 顺序表的长度
	int size; 		 // 顺序表总的空间大小
};

顺序表的实现:

//顺序表的初始化
#define MAX_SIZE 100 

typedef struct{ 
	int *elems; // 顺序表的基地址 
	int length; // 顺序表的长度 
	int size; // 顺序表的空间 
}SqList; 

bool initList(SqList &L) //构造一个空的顺序表 L 
{ 
	L.elems=new int[MAX_SIZE]; //为顺序表分配 Maxsize 个空间 
	if(!L.elems) return false; //存储分配失败 
	L.length=0; 			   //空表长度为 0 
	L.size = MAX_SIZE; 
	return true; 
}

在这里插入图片描述

//顺序表增加元素
bool listAppend(SqList &L, int e) { 
	if(L.length==MAX_SIZE) return false; //存储空间已满 
	L.elems[L.length] = e; 
	L.length++; //表长增 1 
	return true; 
}

在这里插入图片描述

//顺序表插入元素
bool listInsert(SqList &L,int i, int e) { 
	if(i<0 || i>=L.length)return false; //i 值不合法 
	if(L.length==MAX_SIZE) return false; //存储空间已满 
	
	for(int j=L.length-1; j>=i; j--){ 
		L.elems[j+1]=L.elems[j];
		//从最后一个元素开始后移,直到第 i 个元 素后移
	}
	
	L.elems[i]=e; //将新元素 e 放入第 i 个位置 
	L.length++; //表长增 1 
	return true; 
}

在这里插入图片描述

//顺序表删除元素
bool listDelete(SqList &L,int i) { 
	if(i<0 || i>=L.length) return false; //不合法 
	
	if(i == L.length-1){//删除最后一个元素,直接删除 
		L.length--; 
		return true; 
	}
	
	for (int j=i; j<L.length-1; j++){ 
		L.elems[j] =L.elems[j+1]; //被删除元素之后的元素前移 
	}
	
	L.length--; 
	return true; 
}

在这里插入图片描述

//顺序表销毁
void destroyList(SqList &L) { 
	if (L.elems) delete []L.elems;//释放存储空间 
	L.length = 0; 
	L.size = 0; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值