Problem B: 删除区间内的元素(线性表)
Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 261 Solved: 93
[ Submit][ Status][ Web Board]
Description
若一个线性表L采用顺序存储结构,其中元素都为整数。设计一个算法,删除元素值在[x,y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1).
顺序表定义为:
typedef struct
{
ElemType data[SizeMax];
int length;
} SqList;
需编写的算法为:
bool Delete(SqList *&L,ElemType x,ElemType y);
注意:只需提交删除区间内元素的算法Delete部分。
Input
输入的第一行代表线性表的长度n,n<=SizeMax。第二行输入n个元素并插入到线性表中,第三行输入两个整数x,y,确定区间。
Output
输出的数据占两行,第一行是删除之后线性表的长度length,接下来的一行是线性表中的每个元素。
Sample Input
10
5 3 6 2 1 9 8 7 4 0
3 7
Sample Output
52 1 9 8 0
#include <iostream> #define SizeMax 100 using namespace std; int a[100]; typedef int ElemType; typedef struct { ElemType data[SizeMax]; int length; } SqList; void InitList(SqList *L) { L->length=0; } void CreatList(SqList *L,ElemType n) { int i; for(i=0;i<n;i++) L->data[i]=a[i]; L->length=n; } bool Delete(SqList *L,ElemType x,ElemType y) { int i,k=0; if(x>y) return false; for(i=0;i<L->length;i++) { if(L->data[i]<x||L->data[i]>y) { L->data[k]=L->data[i]; k++; } } L->length=k; return true; } void OutputList(SqList *L) { int i; for(i=0;i<L->length-1;i++) cout<<L->data[i]<<' '; cout<<L->data[L->length-1]; } int main() { SqList L; int n,i,x,y; cin>>n; for(i=0;i<n;i++) cin>>a[i]; cin>>x>>y; InitList(&L); CreatList(&L,n); if(Delete(&L,x,y)) OutputList(&L); return 0; }