顺序表的增删查
#include<iostream>
#include<stdlib.h>
#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));
}
运行结果: