线性表的顺序结构的基本操作(C语言实现)

顺序表上基本操作的实现

1. 初始化一个顺序表
//初始化一个线性表
void InitList(struct SeqList *L) {
	L->CurSize = InitSize;
	L->elem = (ElemType *)malloc(InitSize * sizeof(ElemType));
	if (!L->elem)
		exit(1);
	L->length = 0;
}
2.在指定位置插入一个元素
//插入一个元素
void Insert(struct SeqList *L, int i, ElemType e)
{
	if (i > L->length + 1 || i < 1)
		printf("位置错误(插入元素)");
	++L->length;
	for (int j = L->length - 1; j >= i - 1; j--)
		L->elem[j] = L->elem[j - 1];
	L->elem[i - 1] = e;
}
3.在尾部插入一个元素
//在尾部添加一个元素
bool InsertLast(struct SeqList *L, ElemType e)
{
	if (L->length == L->CurSize)
		return false;
	L->elem[L->length] = e;
	L->length++;
	return true;
}
4.在首部插入一个元素
//在首部添加一个元素
void InsertFirst(struct SeqList *L, ElemType e)
{
	for (int i = L->length - 1; i >= 0; i--)
		L->elem[i + 1] = L->elem[i];
	L->elem[0] = e;
	L->length++;
}
5.删除一个元素
//删除操作
ElemType ListDelete(struct SeqList *L, int i)
{
	if (i > L->length || i < 0)
		printf("没有此位置");
	ElemType e = L->elem[i - 1];
	for (int j = i - 1; j < L->length; j++)
		L->elem[j] = L->elem[j + 1];
	L->length--;
	return e;
}
6.按值查找一个元素
//按值查找
int LocateElem(struct SeqList *L, ElemType e)
{
	bool flag = false;
	for (int i = 0; i < L->length; i++)
	{
		if (L->elem[i] == e)
		{
			flag = true;
			return i;
		}	
	}
	if (flag)
		return -1;
}
7.按位查找一个元素
//按位查找
ElemType GetElem(struct SeqList *L, int i)
{
	if (i<0 || i>L->length)
		exit(1);
	return L->elem[i - 1];
}
8.销毁操作
//销毁操作
void DestroyList(struct SeqList *L) {
	if (L->elem != NULL)
	{
		free(L->elem);
		L->elem = 0;
		L->length = L->CurSize = 0;
	}
}
9.输出表中元素个数
//返回表长度
int Length(struct  SeqList *L)
{
	return L->length;
}
10.判断是否为空
//判空操作
bool Empty(struct SeqList *L)
{
	if (L->length == 0)
		return true;
	else
		return false;
}

11.递增排序
//排序操作
void paixu(struct SeqList *L)
{
	for (int i = 0; i < L->length; i++)
		for (int j = i; j < L->length; j++)
		{
			if (L->elem[j] <= L->elem[i])
			{
				int num = L->elem[i];
				L->elem[i] = L->elem[j];
				L->elem[j] = num;
			}
		}
}
12.输出表中的元素
//输出表
void show(struct SeqList *L)
{
	if (L->length == 0)
		printf("此表为空");
	for (int i = 0; i < L->length; i++)
		printf("%d ", L->elem[i]);
	printf("\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值