實(shí)驗(yàn)二 線性表_第1頁
實(shí)驗(yàn)二 線性表_第2頁
實(shí)驗(yàn)二 線性表_第3頁
實(shí)驗(yàn)二 線性表_第4頁
實(shí)驗(yàn)二 線性表_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)報(bào)告二 線性表一、 實(shí)驗(yàn)?zāi)康模海?) 理解線性表的邏輯結(jié)構(gòu)、兩種存儲(chǔ)結(jié)構(gòu)和數(shù)據(jù)操作;(2) 應(yīng)用順序表的基本算法實(shí)現(xiàn)集合A=AUB算法,應(yīng)用順序表的基本算法實(shí)現(xiàn)兩有序順序表的歸并算法;(單鏈表的歸并算法)(3) 掌握單鏈表的遍歷、插入和刪除等操作算法,實(shí)現(xiàn)多項(xiàng)式相加。二、 實(shí)驗(yàn)內(nèi)容:1、設(shè)有線性表 LA(3,5,8,11)和 LB=(2,6,8,9,11,15,20); 若LA和LB分別表示兩個(gè)集合A和B,求新集合 AA U B(并操作,相同元素不保留); 預(yù)測輸出:LA=(3,5,8,11,2,6,9,15,20)實(shí)現(xiàn)代碼:package Q1_1;public class Node&l

2、t;T> public T data;public Node<T> next;public Node(T data,Node<T> next)this.data=data;this.next=next;public Node()this(null,null);package Q1_1;import Q1_2.Node;public class LList public static Node<Integer> headA;public static Node<Integer> headB;public static Node<Inte

3、ger> CreateLA()int A=3,5,8,11;Node<Integer> LA = new Node<Integer>();headA=LA;for(int i=0;i<A.length;i+)LA.next=new Node<Integer>(Ai,null);LA=LA.next ;return headA;public static Node<Integer> CreateLB()int B=2,6,8,9,11,15,20;Node<Integer> LB = new Node<Integer&

4、gt;();headB=LB;for(int i=0;i<B.length;i+)LB.next=new Node<Integer>(Bi,null);LB=LB.next ;return headB;public static boolean Compare(Node<Integer> List,int t)Node<Integer> p=List.next;boolean flag=false;while(p!=null)if(p.data=t)flag=true;p=p.next ;return flag;public static Node&l

5、t;Integer> link(Node<Integer> LA,Node<Integer> LB)LB=LB.next;LA=LA.next;boolean flag;Node<Integer> rear = null;while(LA!=null)rear=LA;LA=LA.next;while(LB!=null)flag=Compare(headA,LB.data);if(flag=false)Node<Integer >temp =new Node<Integer>(LB.data,null);rear.next=tem

6、p;rear=rear.next;LB=LB.next;elseLB=LB.next;return headA;public static void main(String args) Node<Integer> t = new Node<Integer>();headA=CreateLA();headB=CreateLB();t=link(headA,headB);while(t.next!=null)System.out.printf("%-3d",t.next.data);t=t.next;粘貼運(yùn)行結(jié)果: 將LA與LB表歸并,要求仍有序(相同元

7、素要保留)預(yù)測輸出:LC=(2,3,5,6,8,8,9,11,11,15,20)package Q1_2;public class Node<T> public T data;public Node<T> next;public Node(T data,Node<T> next)this.data=data;this.next=next;public Node()this(null,null);package Q1_2;import java.util.*;public class LList public static Node<Integer>

8、; headA;public static Node<Integer> headB;public static Node<Integer> CreateLA()int A=3,5,8,11;Node<Integer> LA = new Node<Integer>();headA=LA;for(int i=0;i<A.length;i+)LA.next=new Node<Integer>(Ai,null);LA=LA.next ;return headA;public static Node<Integer> Crea

9、teLB()int B=2,6,8,9,11,15,20;Node<Integer> LB = new Node<Integer>();headB=LB;for(int i=0;i<B.length;i+)LB.next=new Node<Integer>(Bi,null);LB=LB.next ;return headB;public static Node<Integer> compare(Node<Integer> LA,Node<Integer> LB)LB=LB.next;LA=LA.next;while(

10、LA!=null)if(LB.data <= LA.data && LA.data <LB.next.data)Node<Integer >temp =new Node<Integer>(LA.data,null);temp.next=LB.next ;LB.next=temp;LA=LA.next ;elseLB=LB.next ;return headB;public static void main(String args) Node<Integer> t = new Node<Integer>();headA=

11、CreateLA();headB=CreateLB();t=compare(headA,headB);while(t.next!=null)System.out.printf("%-3d",t.next.data);t=t.next;粘貼運(yùn)行結(jié)果:2、在SinglyLinkedList類中增加下列成員方法。public SinglyLinkedList(E element)/由指定數(shù)組中的多個(gè)對(duì)象構(gòu)造單鏈表public SinglyLinkedList(SinglyLinkedList list)/以單鏈表list構(gòu)造新的單鏈表,復(fù)制單鏈表public void conca

12、t(SinglyLinkedList list)/將指定單鏈表list鏈接在當(dāng)前單鏈表之后public Node<E> search(E element)/若查找到指定,則返回結(jié)點(diǎn),否則返回nullpublic boolean contain (E element)/以查找結(jié)果判斷單鏈表是否包含指定對(duì)象public boolean remove (E element)/移去首次出現(xiàn)的指定對(duì)象public boolean replace (Object obj, E element)/將單鏈表中的obj對(duì)象替換為對(duì)象elementpublic boolean equals(Objec

13、t obj)/比較兩條單鏈表是否相等實(shí)現(xiàn)代碼:package Q2;public class Node<T> public T data;public Node<T> next;public Node(T data,Node<T> next)this.data=data;this.next=next;public Node()this(null,null);package Q2;public class SinglyLinkedList<E>Node<E> head;public SinglyLinkedList(E element)

14、/由指定數(shù)組中的多個(gè)對(duì)象構(gòu)造單鏈表head = new Node<E>(); Node<E> List = head;for(int i=0;i<element.length;i+)List.next=new Node(elementi,null);List=List.next ;public SinglyLinkedList(SinglyLinkedList list)/以單鏈表list構(gòu)造新的單鏈表,復(fù)制單鏈表head=new Node<E>();Node<E> list_new = head;Node<E> p=list.

15、head;if(p.data=null)p=p.next;list_new=list_new.next;while(p!=null)list_new.next =new Node<E>(p.data,null);list_new=list_new.next;p=p.next ;public void concat(SinglyLinkedList list)/將指定單鏈表list鏈接在當(dāng)前單鏈表之后Node<E> rear = null;Node<E> p = head;Node<E> q=list.head.next ;if(p.data=nu

16、ll)p=p.next ;while(p!=null)rear=p;p=p.next ;if(q=null)q=q.next ;rear.next=q;public Node<E> search(E element)/若查找到指定,則返回結(jié)點(diǎn),否則返回nullNode<E> p=this.head;Node<E> temp=null;if(p=null)p=p.next ;while(p.next!=null)if(p.data=element)temp=p;p=p.next ;return temp;public boolean contain (E el

17、ement)/以查找結(jié)果判斷單鏈表是否包含指定對(duì)象boolean flag=false;Node<E> p=this.head;Node<E> temp=null;if(p=null)p=p.next ;while(p!=null)if(p.data=element)flag=true;p=p.next ;return flag;public boolean remove (E element)/移去首次出現(xiàn)的指定對(duì)象Node<E> p=this.head;Node<E> temp=null;Node<E> front=head;bo

18、olean flag=false;if(p=null)p=p.next ;while(p!=null && temp=null)if(p.data=element)temp=p;flag=true;break;p=p.next ;front=front.next ;front=p.next ;return flag;public boolean replace (Object obj, E element)/將單鏈表中的obj對(duì)象替換為對(duì)象elementboolean flag=false; if (obj!=null && element!=null) Nod

19、e<E> p=this.head; while (p!=null) if (obj.equals(p.data) p.data = element; flag = true; p = p.next; return flag;public boolean equals(Object obj)/比較兩條單鏈表是否相等boolean flag=true;SinglyLinkedList x=(SinglyLinkedList) obj;Node t=x.head.next;Node s=this.head.next;while(t!=null&&s!=null)if(t.

20、data!=s.data)flag=false;break;t=t.next;s=s.next; return flag;package Q2;import java.util.*;public class Test static Integer x=3,5,8,11;static Integer x1=3,5,8,11;static Integer x2=2,6,8,9,11,15,20;static SinglyLinkedList<Integer> List1=new SinglyLinkedList<Integer>(x);static SinglyLinked

21、List<Integer> List2=new SinglyLinkedList<Integer>(x1);static SinglyLinkedList<Integer> List3=new SinglyLinkedList<Integer>(x2);public static void disList(SinglyLinkedList List)for(Node temp=List.head.next;temp!=null;temp=temp.next)System.out.printf("%-5d",temp.data)

22、;System.out.println();public static void concat()List1.concat(List3);public static void Find()System.out.println("請(qǐng)輸入需要查找的數(shù):");Scanner scan=new Scanner(System.in);Integer element=scan.nextInt();Node t=List1.search(element);if(t!=null)System.out.println(t.data);elseSystem.out.println("

23、List1中找不到指定的數(shù)。");public static void Contain()System.out.println("請(qǐng)輸入所需包含的數(shù):");Scanner scan=new Scanner(System.in);Integer element=scan.nextInt();if(List3.contain(element)System.out.printf("List3包含指定的數(shù)%-5dn",element);elseSystem.out.printf("List3不包含指定的數(shù)%-5dn",element

24、);public static void remove()System.out.println("請(qǐng)輸入指定移除的數(shù):");Scanner scan=new Scanner(System.in);Integer element=scan.nextInt();if(List3.remove(element)System.out.printf("%-5d已在List3中移除n",element);else System.out.printf("%-5d無法在List3中找到,無法移除n",element);public static vo

25、id replace()System.out.println("請(qǐng)輸入所需交換的兩個(gè)數(shù):");Scanner scan=new Scanner(System.in);Integer obj=scan.nextInt();Integer element=scan.nextInt();if(List3.replace(obj, element)System.out.printf("%-5d與%-5d兩個(gè)數(shù)成功交換n",obj,element);else System.out.println("無法改動(dòng)");public static vo

26、id equals()if(List1.equals(List2)System.out.println("List1與List2兩個(gè)單鏈表相等");else System.out.println("List1與List2兩個(gè)單鏈表不相等");if(List1.equals(List3)System.out.println("List1與List3兩個(gè)單鏈表相等");else System.out.println("List1與List3兩個(gè)單鏈表不相等");public static void main(Strin

27、g args) disList(List1);disList(List2);disList(List3);concat();disList(List1);Find();Contain();remove();replace();equals();3、算法實(shí)現(xiàn):多項(xiàng)式相加一條單鏈表可以表示一個(gè)一元多項(xiàng)式,每個(gè)結(jié)點(diǎn)包含三個(gè)域:指數(shù)域、系數(shù)域和后繼結(jié)點(diǎn)鏈。表示多項(xiàng)式的單鏈表如圖1所示。給定兩個(gè)多項(xiàng)式,實(shí)現(xiàn)兩個(gè)多項(xiàng)式相加算法。 系數(shù) 指數(shù) 鏈5 1-10 0 -6 23 4 head實(shí)現(xiàn)代碼:package Q3;public class Node<T> public T base;publ

28、ic T index;public Node<T> next;public Node(T base,T index,Node<T> next)this.base=base;this.index=index;this.next=next;public Node()this(null,null,null);package Q3;public class Polynomial public static Node<Integer> head;public static Node<Integer> Create(int t)Node<Integer

29、> p=new Node<Integer>();head=p;for(int i=0;i<t.length;i+)p.next=new Node<Integer>(ti0,ti1, null);p=p.next;print(head);return head;public static void print(Node<Integer> a)a=a.next;while(a.next!=null)System.out.print(a.base+""+a.index+" + ");a=a.next;System.out.print(a.base+""+a.index);System.out.println();public static Node<Integer> Add(Node<Integer> a,Node<Integer> b)Node<In

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論