线性(顺序表)表的模板(非伪代码)

 注意一定要自己手动实现所有代码,不要光听不写!!!

线性表的模板

#include<stdio.h>
#include<stdlib.h>

typedef struct {
	int *elements; //元素数组
	int  capacity; //总的容量大小
	int  size;  //元素总数
}ConsequenceList;

void Creat_ConsequenceList(ConsequenceList * list,int capacity) 
//创建一个容量capacity固定的顺序表
{
	list->elements = (int *)malloc(sizeof(int) * capacity);
	list->capacity = capacity;
	list->size = 0;
}

void Destory_ConsequenceList(ConsequenceList* list)
//删除顺序表
{
	if (list->elements)
	{
		free(list->elements);
		list->elements = NULL;
	}
}

int GetSize_ConsequenceList(ConsequenceList * list)
//获取元素的个数
{
	return list->size;

}
//增加元素
void Add_ConsequenceList(ConsequenceList* list,int index,int element)
{
	if (index < 0 || index > list->capacity) //下标不合法
	{
		printf("不合法的下标索求");
		return;
	}
	if (index == list->capacity) //表明此时需要扩容
	{
		int *New_elements=realloc(list->elements, sizeof(int) * list->capacity * 2);//扩容一倍
		list->elements = New_elements;
		list->capacity *= 2;
	}
	for (int i = list->size; i > index; i--) //数组整体往后挪
	{
		list->elements[i] = list->elements[i - 1];
	}
	list->elements[index] = element;//修改对应下标的值
	list->size++;
}

//删除元素
void Delete_ConsequenceList(ConsequenceList* list, int index)
{
	if (index < 0 || index >= list->size) //下标不合法
	{
		printf("不合法的下标索求");
		return;
	}
	for (int i = index; i < list->size; i++)
	{
		list->elements[i] = list->elements[i + 1];//整体往前覆盖
	}
	list->size--;
}
//修改元素
void Change_ConsequenceList(ConsequenceList* list, int index, int element)
{
	if (index < 0 || index >= list->size) //下标不合法
	{
		printf("不合法的下标索求");
		return;
	}
	list->elements[index] = element;
}

//查找元素
void Find_ConsequenceList(ConsequenceList* list, int element)
{
	int index;//用来存储寻找元素的下标
	
	for (int i = 0; i < list->size; i++)
	{
		if (element == list->elements[i])//找到了
		{
			index = i;
			printf("第%d的值为%d\n", index, list->elements[index]);
			return;
		}
	}

	printf("找不到对应的元素\n");
}

int main()
{
	ConsequenceList list;
	Creat_ConsequenceList(&list, 1);

	for (int i = 0; i <10; i++)
	{
		Add_ConsequenceList(&list, i, i * 10);
		printf("%d %d\n", i, list.elements[i]);
	}
	printf("Size:%d\n", list.size);

	Find_ConsequenceList(&list, 50);
	Change_ConsequenceList(&list, 4, 80);

	Delete_ConsequenceList(&list, 8);
	for (int i = 0; i < list.size; i++)
	{
		printf("%d %d\n", i, list.elements[i]);
	}
	
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值