第1关:删除顺序表中的一些节点
本关任务:编写时间复杂度o(n),空间复杂度o(1)的算法,删除顺序表中值为item的数据元素。
对于满足要求的节点,让其后面的节点往前移动一位
#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 &A, int item)
{
/**************************Begin******************/
for (int i = 0;i < A.length;i ++ )
if(A.elem[i] == item)
{
for (int j = i + 1;j < A.length;j ++ )
A.elem[j - 1] = A.elem[j];
A.length -- ;
}
/***************************End******************/
}
int main()
{
List LA;
InitList(LA);
cin >> n;
ListInput(LA, n);
int item;
cin >> item;
DeleteItem(LA, item);
ListOutput(LA);
return 0;
}