数据结构——顺序表

顺序表的增删查

#include
#include
#define maxSize 50
//以int数据为例实现一个顺序表
using namespace std;
typedef struct {
	int *data;//存放元素的数组。
	int length;//记录当前顺序表长度(元素个数)。
}sqlList;
bool ListInsert(
	sqlList &L//操作对象,这里使用引用的形式
	, int i//插入位置
	, int element)//插入元素
{
	if (i<1 || i>L.length)//判断是否越界
	{
		printf("插入失败,数组越界");
		return false;
	}
	if (L.length >= maxSize)//判断顺序表是否满
	{
		printf("插入失败,顺序表已满");
		return false;
	}
	for (int j = L.length; j >= i; j--)//从队尾开始向后覆盖,然后将第i个元素赋值给element,将顺序表长度+1
	{
		L.data[j] = L.data[j - 1];
	}
	L.data[i - 1] = element;
	L.length++;
	return true;
}
bool listDelete(sqlList& L, int i)//删除位置i上的某个元素
{
	if (i<1 || i>L.length)
	{
		printf("无效位置,删除失败");
		return false;
   }
	for (int j = i; j < L.length; j++)
	{
		L.data[j - 1] = L.data[j];
	}
	L.length--;
	return true;
}
int LocateElem(sqlList L, int e)//查找为e的元素,返回其位置
{
	for (int i = 0; i < L.length; i++)
	{
		if (L.data[i] == e)
			return i + 1;
	}
	return 0;//若返回0代表不存在
}
//测试程序:
int main()
{
	sqlList L;
	L.data = new int[maxSize];
	int temp_arr[50] = { 1,2,3,4,5,6,7,8,9,10};
	memcpy(L.data,temp_arr, sizeof(temp_arr));
	printf("当前数组为:");
	for (int i = 0; i < 10; i++)
		printf("%d ", L.data[i]);
	L.length = 10;
	printf("\n现在我们将在第5号位置插入一个int数据213 \n");
	ListInsert(L, 5, 231);
	printf("当前数组为:\n");
	for (int i = 0; i < L.length; i++)
		printf("%d ", L.data[i]);
	printf("\n现在我们删除5号位置上的元素\n");
	listDelete(L, 5);
	printf("当前数组为:\n");
	for (int i = 0; i < L.length; i++)
		printf("%d ", L.data[i]);
	printf("\n下面查找元素9的位置,位置为:");
	printf("%d", LocateElem(L, 9));
}

运行结果:
数据结构——顺序表_第1张图片

你可能感兴趣的:(数据结构)