C/C++数据结构函数定义(1)线性表-顺序表

1.初始设置定义

#define Maxsize 100 // 定义最大空间 
typedef int ElemType; // 定义元素类型 

2.静态分配定义

typedef struct{ // 静态分配定义 
	ElemType data[Maxsize]; // 定义顺序表中一维数组 
	int length; // 定义顺序表长度 
}SqList; 

3.动态分配定义(优先推荐)

typedef struct{ // 动态分配定义 
	ElemType *elem; // 定义顺序表中一维数组 
	int length; // 定义顺序表长度 
} SqList;

4.顺序表初始化

bool InitList(SqList &L){ // 初始化顺序表 
	L.elem = new int[Maxsize]; // 为顺序表动态分配Maxsize个空间 
	if(!L.elem)return false; // 分配空间失败 
	L.length = 0; // 顺序表初始为0 
	return true;
}

5.顺序表创建

bool CreatList(SqList &L){ // 创建顺序表 
	int x,i = 0;
	scanf("%d",&x);
	while(x != -1){ // 输入-1时结束(结束条件课自行设置) 
		if(L.length == Maxsize){
			printf("顺序表已满");
			return false;
		}
		L.elem[i++] = x; // 将数据x存入第i个位置,并令i后移至下一位 
		L.length++; // 顺序表长度+1 
		scanf("%d",&x);
	}
	return true;
} 

6.顺序表中查找第i个数据

bool GetElem(SqList L, int i, int &e){ // 获取第i个元素存入e中 
	if(i<1 || i>L.length)return false; // 若i超出限度则无效 
	e = L.elem[i-1]; // 将第i个元素存入e中 
	return true;
}

7.顺序表中查找元素e的位置

int LocateElem(SqList L, int e){ // 查找元素e的位置 
	for(int i=0; i<L.length; i++)
		if(L.elem[i] == e)return i+1; // 返回e的位置 
		return -1; // 若未找到则返回-1 
}

8.在顺序表中插入元素e

bool ListInsert_sq(SqList &L, int i, int e){ // 在顺序表第i个位置插入元素e 
	if(i<1 || i>L.length+1)return false; // 若i超出限度则无效 
	if(L.length == Maxsize)return false; // 若顺序表已满则无法插入 
	for(int j=L.length-1; j>=i-1; j--) // 数据后移将插入位置腾出 
		L.elem[j+1] = L.elem[j];
	L.elem[i-1] = e; // 将元素e放入位置 
	L.length++; // 顺序表长度+1 
	return true; 
} 

9.删除顺序表中第i个数据

bool ListDelete_sq(SqList &L, int i, int &e){ // 删除顺序表第i个位置的元素 
	if(i<1 || i>L.length+1)return false; // 若i超出限度则无效 
	e = L.elem[i-1]; // 保存被删数据至e中 
	for(int j=i; j<=L.length; j++)
		L.elem[j-1] = L.elem[j]; 
	L.length--; // 顺序表长度-1 
	return true; 
} 

10.合并有序顺序表La与Lb

void MergeSqList(SqList La, SqList Lb, SqList &Lc){ // 将有序顺序表La和Lb合并为Lc 
	int i,j,k;
	i = j = k = 0;
	Lc.length = La.length + Lb.length; // 新表Lc的长度为La与Lb两表长度之和 
	Lc.elem = new int[Lc.length]; // 为新表Lc分配空间 
	while(i<La.length && j<Lb.length){ // 若La与Lb非空表 
		if(La.elem[i] <= Lb.elem[j]) // 依次取出La与Lb中较小值放入新表Lc中 
			Lc.elem[k++] = La.elem[i++];
		else
			Lc.elem[k++] = Lb.elem[j++];
		while(i<La.length) // 若La还有剩余则将其全部放入新表Lc中 
			Lc.elem[k++] = La.elem[i++];
		while(j<Lb.length) // 若Lb还有剩余则将其全部放入新表Lc中 
			Lc.elem[k++] = Lb.elem[j++];
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘枫--odin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值