//在几个数字之间实现取值,查找,插入,和删除操作
#include<iostream>
#include<string>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define OVERFLOW -2
#define ERROR -2
typedef struct
{
int *elem;
int length;
}sqlist;
//初始化
int InitList(sqlist &L)
{
L.elem = new int[MAXSIZE];
if (!L.elem)
{
exit(OVERFLOW);
}
L.length = 0;
return OK;
}
//插入操作
int ListInsert_Sq(sqlist &L, int i, int e)
{
if (i<1 || i>L.length + 1)
{
return -1; //i值不合法
}
if (L.length == MAXSIZE)
{
return ERROR; //当前存储空间已满
}
for (int j = L.length - 1; j >= i - 1; j--)
{
L.elem[j + 1] = L.elem[j]; //插入位置及之后的元素后移
}
L.elem[i - 1] = e; //将新元素e放入第i个位置
++L.length; //表长增1
return OK;
}
//取值操作
int GetElem(sqlist L, int i, int &e)
{
if (i<1 || i>L.length)
{
return ERROR;
}
e = L.elem[i - 1]; //第i-1的单元存储着第i个数据
return OK;
}
//顺序表的查找
int LocateELem(sqlist L, int e)
{
for (int i = 0; i < L.length; i++)
{
if (L.elem[i] == e)
{
return i + 1;
}
}
return 0;
}
//顺序表的删除
int ListDelete_Sq(sqlist &L, int i)
{
if ((i < 1) || (i > L.length))
{
return ERROR; //i值不合法
}
for (int j = i; j <= L.length - 1; j++)
{
L.elem[j - 1] = L.elem[j]; //被删除元素之后的元素前移
}
--L.length; //表长减1
return OK;
}
int main()
{
sqlist L;
int initflag=InitList(L);
if (initflag == 1)
{
cout << "创建成功" << endl;
}
else
{
cout << "创建失败" << endl;;
}
for (int i = 0; i < 20; i++)
{
L.elem[i] = i + 100;
}
L.length = 20;
for (int j = 0; j < 20; j++)
{
cout << L.elem[j] << " ";
}
//2.获得元素
int k, value, getElem_flag;
cout << endl;
cout << "请输入序号取值:";
cin >> k;
getElem_flag = GetElem(L, k, value);
if (getElem_flag == 1)
{
cout << "获取到的数据为:" << value << endl;
}
else
{
cout << "输入的位置越界!" << endl;
}
//3.查找值
cout << endl;
cout << endl;
int e, local_flag;
cout << "输入查找指定的值:";
cin >> e;
local_flag = LocateELem(L, e);
if (local_flag)
{
cout << "该元素的位置是:" << local_flag << endl;
}
else
{
cout << "没有找到该元素!" << endl;
}
//4.插入元素
cout << endl;
int Insert_i, Insert_value, Insert_flag;
cout << "请输入插入的序号:";
cin >> Insert_i;
cout << "请输入插入的值:";
cin >> Insert_value;
Insert_flag = ListInsert_Sq(L, Insert_i, Insert_value);
if (Insert_flag)
{ //插入成果循环输出L中元素
cout << "插入成功!" << endl;
cout << "顺序表长度:" << L.length << endl;
for (int h = 0; h < L.length; h++)
{
cout << L.elem[h] << " ";
}
cout << endl;
}
//5.删除元素
cout << endl;
int delete_i, delete_flag;
cout << "请输入要删除的序号:";
cin >> delete_i;
delete_flag = ListDelete_Sq(L, delete_i);
if (delete_flag)
{
//删除成功
cout << "删除成功!" << endl;
cout << "顺序表的长度:" << L.length << endl;
for (int h = 0; h < L.length; h++)
{
cout << L.elem[h] << " ";
}
cout << endl;
}
system("pause");
return 0;
}
顺序表的初始化,取值,查找,插入,删除操作
于 2021-05-05 19:27:09 首次发布