山东建筑大学计算机学院课程设计说明书
}
private AnyType remove( Node
theSize--;
return p.data; }//删除操作
private void inverse(){
Node
p=headNode.next; q=p.next;
while(p!=headNode){ }
l=q.next;//空置的中转结点赋值
q.next=p;//将p、q链表的前后域置换。q由p的后域变成前域 p.prev=q;
p=q;//置换后,将各个结点置换输出。 q=l;
q.next=p;
p.prev=q;//当p为头结点时,直接将前后域置换。 }//逆置
private Node
if(idex<0||idex>size())
8
山东建筑大学计算机学院课程设计说明书
throw new IndexOutOfBoundsException(\
idex:\+idex+\+size()); if(idex p=headNode; for(int i=0;i<=idex;i++) p=p.next; } else{ p=headNode; for(int i=size();i>idex;i--){ p=p.prev; } } return p; }//查找结点位置 public void print(){ for(int i=0;i System.out.print(getNode(i).data+\); System.out.println(); }//结果输出 public void choose(){ System.out.println(\插入第i个节点\); System.out.println(\删除第i个节点\); System.out.println(\插入第一个节点\); System.out.println(\插入最后一个节点\); System.out.println(\逆置\); }//选择操作项 public static void main(String[] args){ DlList int xuanze; 9 山东建筑大学计算机学院课程设计说明书 System.out.println(\请输入链表的元素的个数(大于0个):\); int n=sc.nextInt(); System.out.println(\请输入链表的\+n+\个元素:\); for(int i=1;i<=n;i++){ int l=sc.nextInt(); dl.add(l);//链表元素输入 } System.out.println(\您输入的链表为:\); dl.print();//调用print方法,提示操作。 System.out.println(\请选择操作项:\); dl.choose();//调用choose,选择操作。 while(true){ xuanze=sc.nextInt(); switch(xuanze){ case 1: System.out.println(\请输入要插入的位置下标和数据:\); int idex=sc.nextInt(); int data=sc.nextInt(); dl.add(idex, data); dl.print(); break; case 2: System.out.println(\请输入要删除节点的下标:\); int idex1=sc.nextInt(); dl.remove(idex1); dl.print(); break; case 3: System.out.println(\请输入插入第一个节点的元素:\); int data1=sc.nextInt(); dl.add(0,data1); dl.print(); break; case 4: System.out.println(\请输入插入最后位置的元素:\); int data2=sc.nextInt(); 10 山东建筑大学计算机学院课程设计说明书 dl.add(dl.size(), data2); dl.print(); break; case 5: dl.inverse(); dl.print(); break; default: System.out.println(\你的输入有误,请重新输入!\); break; } } } } 五、测试数据 1、对每个函数的测试数据 链表中的元素插入为1、2、3、4、5 插入第二个结点的元素为6 删除第二个节点的位置的元素6 插入第一个节点的元素为7 插入最后一个节点的元素为6 逆置链表 2、对程序整体的测试数据 输入元素为1、2、3、4、5的双向循环链表 六、测试情况 请输入链表的元素的个数(大于0个): 5 请输入链表的5个元素: 1 2 11
相关推荐: