C数据结构与算法-基础整理-线性表-01:顺序表操作集

0x01.相关结构与宏定义

//宏定义正误类型
#define ok 1
#define error 0
#define true 1
#define false 0

//定义初始化顺序表的大小
#define INI_SIZE 50

//定义每次增加的大小
#define ADD_SIZE 5

//定义函数返回值类型
typedef int Status;

//定义数据类型,暂定为int型
typedef int Elemtype;

//创建顺序表的结构体
typedef struct
{
	Elemtype* data;//存储空间基地址,也是数据载体,可以理解为一个动态数组;
	int length;    //顺序表当前的长度;
	int size;      //当前已分配的表长大小;
}SqList;

0x02.创建顺序表

//创建一个空的顺序表
Status CreateList(SqList* L)
{
	L->data = (Elemtype*)malloc(INI_SIZE * sizeof(Elemtype));//动态创建顺序表结构体中的数据存储数组;
	//处理动态分配失败的异常情况;
	if (!L->data)
	{
		return error;
	}
	L->length = 0;
	L->size = INI_SIZE;
	return ok;
}

0x03.增删遍历

//在顺序表的第k个位置添加数据为m的元素
Status AddData(SqList* L,int k,int m)
{
	//处理插入位置不合理的异常;
	if (k<1 || k>L->length + 1)
	{
		printf("你的插入位置3不合理!!!\n");
		return error;
	}
	if (L->length >= L->size)
	{
		Elemtype*pnew;
                pnew=(Elemtype *)realloc(L->data, (L->size + ADD_SIZE) * sizeof(Elemtype));//如果存储空间已满,利用realloc函数增加分配;
		if (!pnew)
		{
			return error;
		}
		L->data = pnew;
		L->size += ADD_SIZE;
	}
	Elemtype* p = &L->data[k - 1];
	Elemtype* q = &L->data[L->length - 1];
	for (; q >= p; q--)
	{
		*(q+1) = *q;
	}
	*p = m;
	L->length++;
	return ok;
}
//删除指定元素
Status DeleteList(SqList* L,int k)
{
	if (k<1 || k>L->length)
	{
		printf("该元素不存在!!!\n");
		return error;
	}
	printf("将要删除的元素信息为:第 %d 号元素 ,该元素值为 %d \n", k, L->data[k-1]);
	Elemtype* p = &L->data[k - 1];
	for (; p < &L->data[L->length]; p++)
	{
		*p = *(p + 1);
	}
	L->length--;
	return ok;
}
//遍历顺序表
Status PrintList(SqList L)
{
	int i;
	for (i = 0; i < L.length; i++)
	{
		printf("第 %d 个元素数据为 %d \n", i + 1, L.data[i]);
	}
	return ok;
}

 

发布了50 篇原创文章 · 获赞 35 · 访问量 1294

猜你喜欢

转载自blog.csdn.net/ATFWUS/article/details/104473501