顺序表的创建、插入、更新、删除、显示、销毁

顺序表的创建、插入、更新、删除、显示、销毁

  今天是第一次写博客,打算从数据结构最基础的顺序表做起,如有错误,忘多多批评指正。
  本人写代码有个习惯就是把代码分模块来写,分为头文件和源文件。首先介绍顺序表头文件的书写:
  1、创建顺序表节点;
  2、枚举错误类型;
  3、顺序表的增删改查;
 首先第一步,创建顺序表节点,节点包括顺序表存储数据和数量:
typedef struct List
{
	data_t data[SIZE];
	int count;
}List;
第二部,枚举错误类型:
enum LIST_ERR_OP
{
	LIST_NOT_FOUND = -3,
	LIST_FULL_ERR,
	LIST_ARG_ERR,
	LIST_OK,
	LIST_EMPTY_ERR
};
第三步,顺序表的创建、增删改查、销毁和显示:
List* createList();
int insertItemList(List* pList, int iIndex, data_t tData);
int deleteItemList(List* pList, int iIndex, data_t* pData);
int updateItemList(List* pList, data_t oldData, data_t newData);
int searchItemList(List* pList, data_t tData);
int sortList(List* pList);
void destroyList(List** pList);
void showList(List* pList);
如此,顺序表的头文件就写好了,接下来是源文件的书写。
第一步,创建顺序表:
List* createList()
{
	List* pList = (List*)malloc(sizeof(List));//创建顺序表;
	if (NULL == pList)//判断是否创建成功
	{
		return NULL;
	}
	memset(pList, 0, sizeof(List));//清空!注意有malloc的地方同时就要有memset!
	return pList;
}
  

第二步,插入:

int insertItemList(List* pList, int iIndex, data_t tData)
{
	if (NULL == pList || iIndex < 0 || iIndex > pList->count)//判断
	{
		return LIST_ARG_ERR;
	}
	if (SIZE == pList->count)//判断顺序表是否满
	{
		return LIST_FULL_ERR;
	}
	int i;
	//这里选用的是尾插法
	for (i = pList->count - 1; i >= iIndex; i--)
	{
		pList->data[i + 1] = pList->data[i];
	}
	pList->data[iIndex] = tData;
	pList->count++;
	return LIST_OK;
}
第三步,删除顺序表中的某个数据:
int deleteItemList(List* pList, int iIndex, data_t *pData)
{
	if (NULL == pList || iIndex < 0 || iIndex >= pList->count || NULL == pData)
	{
		return LIST_ARG_ERR;
	}
	if (0 == pList->count)
	{
		return LIST_EMPTY_ERR;
	}
	//保存要删除的元素
	*pData = pList->data[iIndex];
	int i;
	for (i = iIndex; i < pList->count - 1; i++)
	{
		pList->data[i] = pList->data[i + 1];
	}
	pList->count--;
	return LIST_OK;
}
第三步,更新顺序表中的某一数据:
int updateItemList(List* pList, data_t oldData, data_t newData)
{
	if (NULL == pList)
	{
		return LIST_ARG_ERR;
	}
	int i;
	for (i = 0; i < pList->count; i++)
	{
		if (pList->data[i] == oldData)
		{
			pList->data[i] = newData;
		}
	}
	return LIST_OK;
}
第四步,查找顺序表中的元素:
int searchItemList(List* pList, data_t tData)
{
	if (NULL == pList)
	{
		return LIST_ARG_ERR;
	}
	int i;
	for (i = 0; i < pList->count; i++)
	{
		if (pList->data[i] = tData)
		{
			printf("%d\n", pList->data[i]);
			return i;
		}
	}
	return LIST_NOT_FOUND;
}
 第五步,排序,这里使用的是冒泡排序:
int sortList(List* pList)
{
	if (NULL == pList)
	{
		return LIST_ARG_ERR;
	}
	int i, j;
	for (i = 0; i < pList->count - 1; i++)
	{
		for (j = 0; j < pList->count - i - 1; j++)
		{
			if (pList->data[j] > pList->data[j + 1])
			{
				data_t temp = pList->data[j];
				pList->data[j] = pList->data[j + 1];
				pList->data[j + 1] = temp;
			}
		}
	}
}
最后,销毁和显示过于简单,就一起放出来了:
//销毁顺序表
void destroyList(List** pList)
{
	if (NULL == *pList)
	{
		return;
	}
	free(*pList);
	*pList = NULL;
}

//显示
void showList(List* pList)
{
	if (NULL == pList)
	{
		return ;
	}
	int i;
	for (i = 0; i < pList->count; i++)
	{
		printf("%d", pList->data[i]);
	}
	printf("\n");
}

完成这些步骤以后,就可以入手写main函数了,通过调用这些封装好的函数,来实现顺序表的创建、增删改查,销毁和显示。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值