答案思路:使用创建单链表LinList xxx=new LinList()
再利用for循环以及insert函数,在i位置,不断插入new Integer(i+1)
再利用delete(x)删除指定位置的元素
再利用for循环,在小于linList,size的范围内,进行System.out.print(linList.getData(i))的取数操作
外边嵌套一层try{} catch(Exception e){System.out.println(e.getMessage());
注意:不同于顺序表SeqList可以直接用x.equals(y)加上while来实现判断是否等于(除非先把Object类转化为Integer,然后再对xx.intValue进行比较
主要原因是链表中结点Node包含了data和next两个成员变量,所以必须定义自己的比较函数
此处需要构造关于参数Object 的compare(Object o1,Object o2)的函数
由于o1,o2已经是Object类,所以不能直接new Integer o1;而是需要再赋值给一个新变量Integer co1=(Integer)o1;
int xx=co1,intValue();
之后就可以借此正常比较了,由此compare函数创立完毕
注意:xxx.data是Object类,compare(xx,xx)中装在的均是Object类
这一步调用是在只创立了一个空的链表LinList myList=new LinList
再利用之前的orederInsert()函数不断插入new Integer(s[i])
先初始化pre=myList.haed
curr=myList.head.next
之后再以curr和xx.next其实就是在不断的向后边移动(别读错方向了)
Q1:Node结点这么使用干什么
设计一个对于单链表中数据元素进行排序的操作,并且只是利用原有的结点,不额外增加新结点
有的算法看着题目简单,其实里边很有深意的
特殊之处在于不能设置额外的新节点,所以此处先将链表L置空,然后再调用
Q2:都置空了难道还有保存的吗?
curr=L.head.next之后,相当于curr.next不断,就是可以复现整个L
所以curr实现了一次截断
L置空之后,剩余信息在curr.data中不断输入
先做一个linListSort(LinList L,Comparator mc)
其中调用包含了orderInsert(L,curr,data,mc)用于排序
排序后内部使用curr=curr.next进行跳转,判断条件为curr!=null
建立顺序表,依次输入元素,然后再删除指定元素,然后再显示
使用SeqList xx =new SeqList(xxx)
插入xxx.insert(i,new Integer(i+1))
删除xx.delete(x)
考察顺序表如何与多形式的结合
顺序表的建立以行作为变数进行如student[]
提取内部具体数值,需要介入long getNumber
String getName
String getSex
int getAge
命令与赋值就是正常java里边的操作
利用xx.insert(i,student[i])把整个数组行student[i]插入其中
Q:想要调用后面定义的函数getNunmber(0,getNmae()xxx之类的还需要用上Student类去定义一个st对象,然后取出数值xx.getData(i)才可以操作
设计一个函数,要求把顺序表第一个出现的数据元素x删除
在顺序表中循环,一旦(第一个)寻找到数据元素x,则停止,并用delete删除,后面的所有元素往前面移动一位(Q:还需要删除如此多次一举吗?)
——用了delete(i)就不需要再写上后边挨个往前边移动了,已经被涵盖在了其中了for循环放L.size之后,进行挨个寻找xx.equals(L.getData(i))注意的是xx为目标数据元素,equals()内部的L。getData(i)为
一直在变换的元素遍历到最底就是i==L.size,未找到则return 0
否则就执行删除操作继续用for循环inseet生成Intger(i+1)来实验,尝试上一步定义的函数dataDelet()
相比于上一题的区别在于,都是顺序
表中的查找和搜索删除,但是只要是
,不管是不是第一个,也就是在这一
步中delete一直存在,哪怕找到了也
不会break
利用for循环对准L.size中
如果发生了xx.equals(L.getData(i))
的情况
则执行L.delete(i)
并且i--,在其内部tag=0
i--的原因是,如果不作处理i则会跳
过往前全部挪动一位的数值,会造成
一位缺漏(虽然只有1位)