【问题描述】设顺序表L中数据元素均为整型,编写一个时间复杂度为O(n), 空间复杂度为O(1)的算法,该算法删除线性表中所有值为k的数据元素。
【输入形式】
第一行包括两个整数n和k,第二行为n个整数,以空格分开
【输出形式】
按顺序输出L中的剩余元素
【样例1输入】
10 33
12 31 11 26 12 2 19 33 43 33
【样例1输出】
12 31 11 26 12 2 19 43
#include<stdio.h>
#include<malloc.h>
#include<iostream>
using namespace std;
#define LIST_INIT_SIZE 100
typedef struct
{
int * elem;
int length;
int listsize;
}sqlist;
void Delete(sqlist& L,int k)
{
int *p=L.elem;
int i;
for(i=0;i<L.length;i++)
{
if(*(p+i)==k)
{
int *q=p+i;
for(q++;q<L.elem+L.length;q++)
*(q-1) = *q;
--L.length;
i--;
}
}
}
int InitList(sqlist &L)
{
L.elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem) exit(-1);
L.listsize = LIST_INIT_SIZE;
return 1;
}
int main()
{
sqlist L;
int k;
scanf("%d%d",&L.length,&k);
InitList(L);
int i=0;
for(i=0;i<L.length;i++)
scanf("%d",&L.elem[i]);
Delete(L,k);
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
}