任务描述
本关任务:编写时间复杂度o(n),空间复杂度o(1)的算法,删除顺序表中值为item的数据元素。
相关知识
为了完成本关任务,你需要掌握:1.建立顺序表,2.如何遍历顺序表。
编程要求
根据提示,在右侧编辑器补充代码。
测试说明
平台会对你编写的代码进行测试:
测试输入:第一行为顺序表元素个数,第二行为数据表的元素,第三行为要删除的元素值 10 1 2 1 3 4 5 2 4 4 6 2 预期输出: 1 1 3 4 5 4 4 6
#include<iostream>
#include<fstream>
using namespace std;
#define MAXSIZE 100
#define ERROR 0
typedef struct
{
int *elem;
int length;
} List;
int n, m;
void InitList(List &L) //创建顺序表
{
L.elem = new int[MAXSIZE];
L.length = 0;
}
void ListInput(List &L, int n) //顺序表数据的输入
{
int i = 0;
while (n --)
{
cin >> L.elem[i];
i ++;
}
L.length = i;
}
int ListLength(List L) //求顺序表的长度
{
return L.length;
}
void GetElem(List L, int i, int &e) //求顺序表的第i个元素,并以e返回
{
e = L.elem[i - 1];
}
bool LocateElem(List L, int e) //判断List里有没有e这个元素
{
int i;
for (i = 0; i < L.length; i++)
if (e == L.elem[i])
return true;
return false;
}
void ListInsert(List &L, int e) //将e插入到List的最后
{
L.elem[L.length] = e;
L.length++;
}
void ListOutput(List L) //输出List
{
int i;
for (i = 0; i < L.length; i++)
cout << L.elem[i] << " ";
cout << endl;
}
void DeleteItem(List &L, int item)
{
/**************************Begin******************/
int i,j=0,k;
for(i=0;i<L.length;i++)
{
GetElem(L,i,j);
if(j==item)
{
for(k=i;k<=L.length-1;k++)
{
L.elem[k-1] = L.elem[k];
}
--L.length;
}
}
/***************************End******************/
}
int main()
{
List LA;
InitList(LA);
cin >> n;
ListInput(LA, n);
int item;
cin >> item;
DeleteItem(LA, item);
ListOutput(LA);
return 0;
}