JAVA大數(shù)據(jù)結(jié)構(gòu)——單鏈表地操作_第1頁
JAVA大數(shù)據(jù)結(jié)構(gòu)——單鏈表地操作_第2頁
JAVA大數(shù)據(jù)結(jié)構(gòu)——單鏈表地操作_第3頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、單鏈表的操作方法一:package ch02;(1)建立結(jié)點(diǎn)類Node.javapublic class Node public Object data ; /存放結(jié)點(diǎn)數(shù)據(jù)值public Node next ; /存放后繼結(jié)點(diǎn)/無參構(gòu)造函數(shù)public Node()this (null , null );/只有結(jié)點(diǎn)值的構(gòu)造函數(shù)public Node(Object data)this (data, null );/帶有節(jié)點(diǎn)值和后繼結(jié)點(diǎn)的構(gòu)造函數(shù)public Node(Object data,Node next)this . data =data;this . next =next;(2)建立鏈表

2、及操作LinkList.javapackage ch02;import java.util.Scanner;public class LinkListimplements IListpublic Node head; /單鏈表的頭指針/構(gòu)造函數(shù)初始化頭結(jié)點(diǎn)public Lin kList()head二 new Node();/構(gòu)造函數(shù)構(gòu)造長度為n的單鏈表publicLin kList(int n, boolean Order) throws Exceptionthis ();if (Order)create1( n);/頭插法順序建立單鏈表elsecreate2( n);/尾插法逆序建立單鏈表

3、/頭插法順序建立單鏈表public void create1( int n) throws ExceptionScanner sc= new Scanner(System. in );System. out .println(”請(qǐng)輸入結(jié)點(diǎn)的數(shù)據(jù)(頭插法):”);for (int i=0;i<n;i+)in sert(0,sc. next();/尾插法逆序建立單鏈表public void create2( int n) throws ExceptionScanner sc= new Scanner(System. in );System. out .println( ”請(qǐng)輸入結(jié)點(diǎn)的數(shù)據(jù)(尾

4、插法):”); for (int i=0;i<n;i+)in sert(le ngth(),sc. next();/將鏈表置空public void clear()head. data = null ;head. next =null ;/判斷鏈表是否為空public boolean isEmpty()return head. next =null ;/返回鏈表長度public int length()Node p= head. next ;int length=0;while (p!= null ) p=p. n ext ;length+; /返回P不空長度length加1return

5、 len gth;/讀取并返回第i個(gè)位置的數(shù)據(jù)元素public Object get( int i) throws Exception Node p= head. next ;int j;/從首結(jié)點(diǎn)開始向后查找,直到p指向第i個(gè)結(jié)點(diǎn)或者p為nullfor (j=0;j<i&&p!=null ;j+)p=p. next ;if (j>i|p= null )/i不合法時(shí)拋出異常throw new Exception( ”第"+i+ "個(gè)數(shù)據(jù)元素不存在”); return p. data ;/插入x作為第i個(gè)元素public void insert(i

6、nt i, Object x) throws ExceptionNode p= head;int j=-1;/尋找第i個(gè)結(jié)點(diǎn)的前驅(qū)i-1 while (p!= null &&j<i-1)p=p. n ext ;J+;if (J>i-1|p= null )/i不合法時(shí)拋出異常throw new Exception(”插入位置不合法")Node s= new Node(x);s. next =p. next ;p. next =s;/刪除第i個(gè)元素public void remove( int i)throws ExceptionNode p= head;in

7、t J=-1;while (p!= null &&J<i-1) p=p. next ;J+;/尋找第i-1個(gè)節(jié)點(diǎn)if (j>i-1|p. next =null )throw new Excepti on("刪除位置不合法");p. next =p. next . next ;/返回兀素x首次出現(xiàn)的位序號(hào)public int indexOf(Object x) Node p= head. next ;int j=0;while (p!= null &&!p. data .equals(x) p=p. n ext ;j+;if (p!

8、= null )return j;elsereturn -1;public void display()Node p= head. next ;while (p!= null )if (p. next =null )System. out .print(p.data );elseSystem. out .print(p. data +" p=p. next ;(3)建立測試類Test.javappublic class test throws Exception public static void main(String args)/ TODOAuto-ge nerated met

9、hod stubScanner sc= new Scanner(System.in );boolean or;int xz,xx;System. out .println(”請(qǐng)選擇插入的方法:0、頭插法,1、尾插法");xz=sc .n ext In t();if (xz!=0)or= true ;elseor= false ;System. out .println(”請(qǐng)插入的結(jié)點(diǎn)的個(gè)數(shù):");xx=sc .n ext In t();Lin kList L=new Lin kList(xx,or);System. out .println("建立的鏈表為:&qu

10、ot;);L.display();System. out .println();System. out .println("鏈表的長度:"+L.le ngth();System. out .println("請(qǐng)輸入查找的結(jié)點(diǎn)的數(shù)據(jù):");Object x=sc .n ext();int position二L.indexOf(x);System. out .println(”結(jié)點(diǎn)的數(shù)據(jù)為:"+x+"的位置為:"+position);System. out .println(”請(qǐng)輸入刪除的結(jié)點(diǎn)的位置:”);int sr=sc .

11、n ext In t();L.remove(sr);L.display();System. out .println();System. out .println(” 鏈表的長度:"+L.length();££ Problems JavadocQ Declaration §5 Error Log EJ Consoltterminated>test (3Java Application C:U5ertAdministr3torAppDat3Local詣選擇插入的方法;0.頭插法,1.屋插法0請(qǐng)插入的箔點(diǎn)的個(gè)數(shù):6語輸入結(jié)點(diǎn)的數(shù)據(jù)(屋插法;A B C

12、E D F建立的旌表為:IS表的長度:6請(qǐng)輸入查找的結(jié)點(diǎn)的數(shù)據(jù):E結(jié)點(diǎn)的數(shù)據(jù)為:E的位羞為:3請(qǐng)輸入刪除的結(jié)點(diǎn)的位置:應(yīng)壬匸泄表的長廈:5方法二(引入get和set方法)Package sy;import java.util.Sca nner;/單鏈表的結(jié)點(diǎn)類public class Node private Object data; / 存放結(jié)點(diǎn)值 private Node next; /后繼結(jié)點(diǎn)的引用 public Node() /無參數(shù)時(shí)的構(gòu)造函數(shù) this( nu II, null);public Node(Object data) / 構(gòu)造值為 data 的結(jié)點(diǎn) this(data,

13、 nu II);public Node(Object data, Node next) /構(gòu)造值為 data 和 next 的結(jié)點(diǎn)構(gòu)造函數(shù) this.data = data; this .next = n ext;public Object getData() return data;public void setData(Object data) this.data = data;public Node getNext() return n ext;public void setNext(Node n ext) this .n ext = n ext;/實(shí)現(xiàn)鏈表的基本操作類public cl

14、ass Lin kList Node head=new Node();/生成一個(gè)帶頭結(jié)點(diǎn)的空鏈表/根據(jù)輸入的一系列整數(shù),以0標(biāo)志結(jié)束,用頭插法建立單鏈表public void creat() throws Excepti on Scanner sc = new Sca nn er(System.i n); /構(gòu)造用于輸入的對(duì)象for (i nt x=sc. next In t(); x!=0; x=sc. next In t() / 輸入若干個(gè)數(shù)據(jù)元素的值(以 0 結(jié)束) insert(0, x);/生成新結(jié)點(diǎn),插入到表頭/返回帶頭結(jié)點(diǎn)的單鏈表中第i個(gè)結(jié)點(diǎn)的數(shù)據(jù)域的值。其中:0w i<

15、curLen-1public Object get(i nt i) throws Exceptio n Node p = head.getNext();/初始化,p指向首結(jié)點(diǎn),j為計(jì)數(shù)器int j = 0;while (p != null && j < i) /從首結(jié)點(diǎn)開始向后查找,直到p指向第i個(gè)結(jié)點(diǎn)或p為空p = p.getNext();/指向后繼結(jié)點(diǎn)+j;計(jì)數(shù)器的值增1if (j > i | p = null) / i小于0或者大于表長減1 throw new Exception(”第” + i + "個(gè)元素不存在");/拋出異常retur

16、n p.getData(); /返回結(jié)點(diǎn)p的數(shù)據(jù)域的值/在帶頭結(jié)點(diǎn)的單鏈表中的第i個(gè)數(shù)據(jù)元素之前插入一個(gè)值為x的元素public void in sert(i nt i, Object x) throws Excepti on Node p = head;/初始化p為頭結(jié)點(diǎn),j為計(jì)數(shù)器intj = -1;while (p != null && j < i - 1) / 尋找 i 個(gè)結(jié)點(diǎn)的前驅(qū)p = p.getNext();+j;/計(jì)數(shù)器的值增1if (j > i - 1 | p = null) / i 不合法throw new Exception(”插入位置不合理&

17、quot;);/輸出異常Node s = new Node(x); / 生成新結(jié)點(diǎn)s.setNext(p.getNext(); 插入單鏈表中p.setNext(s);/刪除帶頭結(jié)點(diǎn)的第i個(gè)數(shù)據(jù)元素。其中i取值圍為:0w i< length()- 1,如果i值不在 此圍則拋出異常public void remove(i nt i) throws Excepti on Node p = head;/初始化p為頭結(jié)點(diǎn),j為計(jì)數(shù)器intj = -1;while (p.getNext() != null && j < i - 1) / 尋找 i 個(gè)結(jié)點(diǎn)的前驅(qū)p = p.get

18、Next();+j;/計(jì)數(shù)器的值增1if (j > i - 1 | p.getNext() = null) / i 小于 0 或者大于表長減 1 throw new Exception(”刪除位置不合理");/輸出異常p.setNext(p.getNext().getNext(); 刪除結(jié)點(diǎn)/輸出線性表中的數(shù)據(jù)元素public void display() 實(shí)用大全Node p = head.getNext();取出帶頭結(jié)點(diǎn)的單鏈表中的首結(jié)點(diǎn)元素 while (p != n ull) System.out.print(p.getData() + " ");/ 輸出數(shù)據(jù)元素的值p = p.getNext(); 取下一個(gè)結(jié)點(diǎn)System.out.println(); 換行/測試類public class SY 2_Li nkListpublic static voi

溫馨提示

  • 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)論