需要注意的地方:删除一个元素后,下一次遍历的下标值不变,另外程序使用了动态线性表,在插入操作时可以扩容,使用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); }
转载于:https://www.cnblogs.com/GoAhead/archive/2012/08/23/2652014.html