设有一个顺序表L,其元素为整形数据,设计一个算法将L中所有小于0的整数放在前半部分,大于等于0的整数放在后面部分。
解:从L的两端查找,前端查找大雨到等于0的元素(位置为i),后端找小于0的元素(位置为j),找到后将这两位置的元素进行互换。
对应算法如下:
voidmove(SqListL)//L为引用型参数{ElemTypetemp;inti=0,j=L.length-1;while(ij){while(ijL.data0)i++;//从前向后找大于等于0的元素L.datawhile(ijL.data[j]=0)j--;//从后向前找小于0的元素L.data[j]if(ij)//交换L.data和L.data[j]{temp=L.data;L.data=L.data[j];L.data[j]=temp;}}}
设计一个算法从顺序表中删除重复的元素,并使剩余元素间的相对次序保持不变。
解:对于顺序表L,用i从1开始遍历其元素,设L.data[0..j](j的初值为0)中没有重复的元素。
检测L.data(jiL.length),若L.data和L.data[0...j]中任何一个元素都不想同,则将L.data存入L.data[j+1]中。
对应算法如下:
voiddelsame(SqListL)//L为引用型参数{inti,j=0,k;for(i=0;iL.length;i++){k=0;while(k=jL.data[k]!=L.data)k++;if(kj)//表示L.data和L.data[0..j]中所有元素都不同{j++;L.data[j]=L.data;}}L.length=j+1;//顺序表长度置新值}预览时标签不可点收录于话题#个上一篇下一篇