1、编写算法,实现从顺序表中删除具有最小值的元素,并由函数返回被删除元素的值
答案想法: 使用SeqList定义对象L,作为函数的参数输入
利用if判断SeqList类的对象L,的长度Length是否0xxx
接下来求解序列的最小元素,需要先假定一个位置变量pos,用于存储和比较——后面先用for不断的循环L.length的长度,然后在内部利用if比较,若不符合,则介入中间值进行调换的工作
——其中if的比较需要将Object类L,转化为Integer类的数值,然后对于Integer类L的对象listElem的第i(已经调换)个元素((Integer)L.listElem[i]).intValue()
最后再利用delete(i)函数进行元素删除,也可以直接进行for循环,从pos+1开始,利用L.listElem[i-1]=L.listElem[i]的逐个向前推进
初始想法: 遍历找出序列中的最小值(算不上排序算法,排序算法是对于整个序列,而这个只是需要一个数而已,其他的数列为乱序没有关系)
delete(i)删除该元素,i是序号怎么办?
使用indexOf()得出序号,再返回删除?
如果遍历时为Null,一开始不知道n具体是多少,得先测算a=L.length还是L.size来着?
2、已知A,B,C为3个递增且有序的顺序表,实现删除A表中又在B表,又在C表的所有元素
—— 注意是:三个表都有的元素(所以可以任意的有先后的两两比较——利用好这三个表递增的特性
初始想法: 首先SeqList定义A,B,C三个对象 for循环遍历A组的元素,然后放入B,C中均利用查找算法求解(查找算法的使用?——折半查找法,有点递归的思想)
3、从有序顺序表中删除其值在s和t之间的所有元素 答案思路: 如果s比t大,就退出 如果SeqList L的length小于等于0则退出 先利用两个外层的for循环定位好s和t的边界值:
for(xx;((Integer)L.listElem[i]).intValue()<s;i++) for(xx;((Integer)L.listElem[j]).intValue()<s;j++)
定位完毕之后,对于该区间内的进行删除,相当于直接将后面的元素覆盖该区段的元素,以j的移动是否超纲作为节点 for(;j<L.curLen;i++,j++) L.listElem[i]=L/listElem[j];
初始想法: 如果s比t大,就退出 如果SeqList L的length小于等于0则退出 满足正常情况下 SeqList L; L.getData()>s || L.getData()<t; i=L.getData().indexOf(); delete(i)
4、实现从顺序表中删除所有重复的元素
答案思路:没有必要再重头遍历,直接就此元素开始往后即可,因为重复之后来回都还是得比较的 for xxxx
for(xx;j<L.curLen;j++) 用equals函数实现判断if(L.listElem[i].equals(L.listElem[j]))
再用前后推移,实现删除L.listElem[k-1]=xxx.[k]
初始想法:两次循环for循环,一次for,一次while也行 isequals()
5、上面的基础上,该顺序表是有序的,如何进一步充分的利用其有序的条件进行删除重复
首先利用for循环为日后的特殊情况i的判断做好基础for(xx;i<L.curLen;i++)
判断该特定位置i的相邻位置情况
while(xxx[i].equalsxxx[j])其中j=i+1;成功之后让j++;
知道找出最终相邻的位置j为止
然后再在其中设置循环用于删除从i-j这几个重复的元素for(k=i+1;j<curLen;k++,j++) L.listElem[k]=L.listElem[j]
初始想法,直接跟后面的1位数比较,相同则删除(此处介入循环,可以解决后面多位数重复的情况),如果不同则退出,继续遍历
6、编写算法,实现两个有序顺序表的合并新的有序顺序表
初始想法: 对于SeqList A B 使得序号数为i,j 如果L[i].elenElem>xxx[j]
——先全部后移(内涵for循环)
——然后再j++ 如果L[i]<L[j]——保持原序列不动,i++