需要注意的地方:删除一个元素后,下一次遍历的下标值不变,另外程序使用了动态线性表,在插入操作时可以扩容,使用p=realloc(p,size)
#include <iostream>
using namespace std;
typedef struct
{
int *p;
int length;
int size;
}sqListEx;
void initList(sqListEx& sqlist,int m){
sqlist.p=(int *)malloc(m*sizeof(int));
sqlist.length=0;
sqlist.size=m;
}
void destroyList(sqListEx& sqlist){
free(sqlist.p);
sqlist.length=0;
sqlist.size=0;
}
int deleteList(sqListEx& sqlist,int n){
if ((n+1)==sqlist.length)
{
sqlist.length--;
return 1;
}
for (int i=n;i<sqlist.length;i++)
{
sqlist.p[i]=sqlist.p[i+1];
}
sqlist.length--;
return 1;
}
void main(){
sqListEx sqListA,sqListB;
initList(sqListA,30);
initList(sqListB,10);
sqListA.p[0]=1;
sqListA.p[1]=2;
sqListA.p[2]=3;
sqListA.p[3]=4;
sqListA.p[4]=5;
sqListA.p[5]=6;
sqListB.p[0]=10;
sqListB.p[1]=60;
sqListB.p[2]=50;
sqListA.length=6;
sqListB.length=3;
for (int i=0;i<sqListA.length;)
{
int flag=0;
for (int j=0;j<sqListB.length;j++)
{
if (sqListA.p[i]==sqListB.p[j])
{
flag=1;
deleteList(sqListA,i);
break;
}
}
if (flag==0)
i++;
}
for (i=0;i<sqListA.length;i++)
{
cout<<sqListA.p[i]<<endl;
}
destroyList(sqListA);
destroyList(sqListB);
}