數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)情境8查找與演示項(xiàng)目開發(fā)_第1頁
數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)情境8查找與演示項(xiàng)目開發(fā)_第2頁
數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)情境8查找與演示項(xiàng)目開發(fā)_第3頁
數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)情境8查找與演示項(xiàng)目開發(fā)_第4頁
數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)情境8查找與演示項(xiàng)目開發(fā)_第5頁
已閱讀5頁,還剩121頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、學(xué)習(xí)情境8 查找與演示工程開發(fā)8.1 任務(wù)一 認(rèn)識(shí)查找8.2 任務(wù)二 線性表的查找8.3 任務(wù)三 二叉排序樹查找8.4 任務(wù)四 哈希表查找和排序是軟件設(shè)計(jì)中最常用的運(yùn)算之一,本學(xué)習(xí)情境主要學(xué)習(xí)順序查找、折半查找、分塊查找、二叉樹排序查找和哈希查找等幾種查找的算法實(shí)現(xiàn)。為了方便教學(xué),也為了學(xué)生能具備綜合應(yīng)用Java的編程技能解決實(shí)際問題的能力,有必要開發(fā)既有一定代碼量、又能解決實(shí)際問題的工程。本學(xué)習(xí)情境根據(jù)查找的數(shù)據(jù)結(jié)構(gòu)和算法,利用Java圖形界面開發(fā)演示工程,其中提供了折半查找、二叉樹排序查找和哈希查找等演示工程。 8.1 任務(wù)一 認(rèn)識(shí)查找查找(search)就是在數(shù)據(jù)集中尋找指定數(shù)據(jù)。如日常

2、生活中的查字典、 號(hào)碼、圖書等,以及高考考生在考試后通過網(wǎng)絡(luò)信息系統(tǒng)查詢成績(jī)和錄取情況等。1查找查找:對(duì)給定的一個(gè)關(guān)鍵字的值,在數(shù)據(jù)表中搜索出一個(gè)關(guān)鍵字的值等于該值的記錄或數(shù)據(jù)。假設(shè)找到了指定的數(shù)據(jù),那么稱之為查找成功,通常是返回該數(shù)據(jù)在查找表中的位置,以便于存取整個(gè)數(shù)據(jù)的信息。假設(shè)表中不存在指定的數(shù)據(jù),這稱為查找不成功或查找失敗,此時(shí)一般是返回一個(gè)能標(biāo)識(shí)查找失敗的值。2查找表的結(jié)構(gòu)有多種查找表的形式,本學(xué)習(xí)情境主要介紹三類表順序表、二叉樹表和哈希表,另外,還涉及索引表結(jié)構(gòu)。顯然,不同形式的表對(duì)應(yīng)不同的查找方法,因而查找的時(shí)間性能也有所不同。3查找性能查找算法的時(shí)間性能一般以查找長(zhǎng)度來衡量。所

3、謂查找長(zhǎng)度,是指查找一個(gè)數(shù)據(jù)所進(jìn)行的關(guān)鍵字的比較次數(shù)。通常情況下,由于各數(shù)據(jù)的查找長(zhǎng)度有所差異,因而常以平均查找長(zhǎng)度、最大查找長(zhǎng)度等來衡量查找算法的總的時(shí)間性能。 8.2 任務(wù)二 線性表的查找線性表的查找算法主要有順序查找、折半查找和分塊查找,分別適用于普通線性表(有序無序均可)、有序順序表和索引順序表三種結(jié)構(gòu)。8.2.1 子任務(wù)1 順序查找1順序查找順序查找:從表的一端開始,依次將每個(gè)數(shù)據(jù)的關(guān)鍵字與給定值進(jìn)行比較,假設(shè)相等,那么查找成功,返回相應(yīng)位置;假設(shè)所有數(shù)據(jù)的關(guān)鍵字與給定值不等,那么返回查找不成功。順序查找又稱為線性查找,是最根本、最簡(jiǎn)單的一種查找算法,主要用于數(shù)據(jù)量較小的線性表。2順

4、序查找的根本程序?qū)崿F(xiàn)package ch8Search;import ;public class SequenceSimple public static int Data = 20, 10, 11, 47, 20, 69, 26, 1, 57;public static int Counter = 1; /順序查找 public static boolean Seq_Search(int Key) int i, n;/數(shù)組下標(biāo)變量,數(shù)組長(zhǎng)度 for (i = 0, n = Data.length; i n; i+) System.out.print( + (int) Datai + ); i

5、f (int) Key = (int) Datai) /查找到數(shù)據(jù)時(shí) return true;/返回true Counter+; return false;/查找不到,返回false public static void main(String args) (請(qǐng)輸入要查找的數(shù)據(jù):); Scanner scan = new ); int KeyValue = (); if (Seq_Search(int) KeyValue) (找到該數(shù)據(jù),查找次數(shù) = + (int) Counter); else /輸出沒有找到的數(shù)據(jù) (找不到該數(shù)據(jù)!); 3順序查找算法分析在等概率情況下,查找成功的平均查找長(zhǎng)

6、度為線性表長(zhǎng)度的一半,查找不成功的平均查找長(zhǎng)度為線性表的長(zhǎng)度。假設(shè)線性表已排序,那么查找不成功的平均查找長(zhǎng)度也為線性表長(zhǎng)度的一半,ASL(不成功)=(n+1)/2。 8.2.2 子任務(wù)2 折半查找1折半查找折半查找(binary search):要求順序表已排序,假定從小到大排序, 從表的中間位置開始比較:(1) 如果當(dāng)前數(shù)據(jù)的關(guān)鍵字等于給定值,那么查找成功;(2) 如果查找值小于當(dāng)前數(shù)據(jù)的關(guān)鍵字,那么在表的前半段繼續(xù)查找;(3) 如果查找值大于當(dāng)前數(shù)據(jù)的關(guān)鍵字,那么在表的后半段繼續(xù)查找。以此重復(fù),直到獲得查找結(jié)果(表示成功),或數(shù)據(jù)段已空(表示不成功)。折半查找是一種典型的采用分治策略的算法

7、,它將問題分解為規(guī)模更小的子問題,分而治之,逐一解決。 2折半查找算法分析折半查找其實(shí)是一棵二叉判定樹,樹高為k=int(lbn)+1,查找成功的比較次數(shù)為1k次,查找不成功的比較次數(shù)為k-1或k次,平均查找長(zhǎng)度為O(lbn)。在順序表長(zhǎng)度相同的情況下,雖然折半查找算法效率比順序查找算法效率高,但是折半查找算法要求數(shù)據(jù)必須是已排序的。順序查找和折半查找均適用于數(shù)據(jù)量較小的情況。3演示程序的實(shí)現(xiàn)以下程序?qū)崿F(xiàn)圖形界面顯示折半查找的過程,文件名為,代碼量為400行,以下是完整代碼(供參考): package ch8Search;/圖形演示折半查找import ;import ;import ;imp

8、ort ;import .*;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import java.awt.Rectangle;import java.awt.Font;public class DemoBinarySearch private JFrame jFrame = null; private JPanel jContentPane = null; private JLabel jLabel2 = null; private JLabel jLabel3 = null;

9、private JLabel jLabel31 = null; private JLabel jLabel32 = null; private JLabel jLabel33 = null; private JLabel jLabel34 = null; private JLabel jLabel35 = null; private JLabel jLabel36 = null; private JLabel jLabel37 = null; private JLabel jLabel4 = null; private JTextField jTextField = null; private

10、 JButton jButton = null; private JButton jButton1 = null; private JButton jButton2 = null; private JButton jButton3 = null; private JLabel label1 = new JLabel8; private int array = 21, 4, 5, 74, 85, 12, 43, 32; private long time = 0; private Object lock = new Object(); private boolean isMove = false

11、; private int oldx; private Bin_search thread = null; private JLabel jLabel5 = null; private JPanel jPanel = null; private JSlider jSlider = null; private JLabel jLabel = null; private JLabel jLabel1 = null; /二分法查找運(yùn)行時(shí)程序出現(xiàn)的界面框架功能實(shí)現(xiàn) private JFrame getJFrame() if (jFrame = null) jFrame = new JFrame();

12、); jFrame.setBounds(new Rectangle(0, 0, 800, 625); jFrame.setContentPane(getJContentPane(); (分塊查找圖形演示); return jFrame; /構(gòu)造面板 private JPanel getJContentPane() if (jContentPane = null) for (int i = 0; i label1.length; i+) label1i = new JLabel(); label1i.setText(String.valueOf(arrayi); jLabel5 = new JL

13、abel(); jLabel5.setBounds(new Rectangle(14, 165, 30, 37); jLabel5.setDisplayedMnemonic(KeyEvent.VK_UNDEFINED); jLabel5.setText(序號(hào)); jLabel4 = new JLabel(); jLabel4.setBounds(new Rectangle(35, 72, 105, 37); jLabel4.setFont(new Font(Dialog, , 14); jLabel4.setHorizontalAlignment(SwingConstants.CENTER);

14、 jLabel4.setText(請(qǐng)輸入要查找的數(shù)); jLabel37 = new JLabel(); jLabel37.setBounds(new Rectangle(645, 166, 51, 36); jLabel37.setHorizontalAlignment(SwingConstants.CENTER); jLabel37.setFont(new Font(Dialog, , 14); jLabel37.setText(8); jLabel36 = new JLabel(); jLabel36.setBounds(new Rectangle(558, 166, 51, 36);

15、jLabel36.setHorizontalAlignment(SwingConstants.CENTER); jLabel36.setFont(new Font(Dialog, , 14); jLabel36.setText(7); jLabel35 = new JLabel(); jLabel35.setBounds(new Rectangle(478, 166, 51, 36); jLabel35.setHorizontalAlignment(SwingConstants.CENTER); jLabel35.setFont(new Font(Dialog, , 14); jLabel35

16、.setText(6); jLabel34 = new JLabel(); jLabel34.setBounds(new Rectangle(390, 166, 51, 36); jLabel34.setHorizontalAlignment(SwingConstants.CENTER); jLabel34.setFont(new Font(Dialog, , 14); jLabel34.setText(5); jLabel33 = new JLabel(); jLabel33.setBounds(new Rectangle(302, 166, 51, 36); jLabel33.setHor

17、izontalAlignment(SwingConstants.CENTER); jLabel33.setFont(new Font(Dialog, , 14); jLabel33.setText(4); jLabel32 = new JLabel(); jLabel32.setBounds(new Rectangle(214, 166, 51, 36); jLabel32.setHorizontalAlignment(SwingConstants.CENTER); jLabel32.setFont(new Font(Dialog, , 14); jLabel32.setText(3); jL

18、abel31 = new JLabel(); jLabel31.setBounds(new Rectangle(126, 166, 51, 36); jLabel31.setHorizontalAlignment(SwingConstants.CENTER); jLabel31.setFont(new Font(Dialog, , 14); jLabel31.setText(2); jLabel3 = new JLabel(); jLabel3.setBounds(new Rectangle(38, 166, 51, 36); jLabel3.setHorizontalAlignment(Sw

19、ingConstants.CENTER); jLabel3.setFont(new Font(Dialog, , 14); jLabel3.setText(1); jLabel2 = new JLabel(); jLabel2.setBounds(new Rectangle(39, 261, 53, 63); oldx = jLabel2.getX(); jLabel2.setFont(new Font(Dialog, , 36); jLabel2.setHorizontalAlignment(SwingConstants.CENTER); jLabel2.setText(); jLabel2

20、.setVisible(false); label17.setBounds(new Rectangle(645, 212, 60, 57); label17.setFont(new Font(Dialog, , 14); label17.setHorizontalAlignment(SwingConstants.CENTER); label16.setBounds(new Rectangle(558, 212, 60, 57); label16.setFont(new Font(Dialog, , 14); label16.setHorizontalAlignment(SwingConstan

21、ts.CENTER); label15.setBounds(new Rectangle(471, 212, 60, 57); label15.setFont(new Font(Dialog, , 14); label15.setHorizontalAlignment(SwingConstants.CENTER); label14.setBounds(new Rectangle(384, 212, 60, 57); label14.setFont(new Font(Dialog, , 14); label14.setHorizontalAlignment(SwingConstants.CENTE

22、R); label13.setBounds(new Rectangle(297, 212, 60, 57); label13.setFont(new Font(Dialog, , 14); label13.setHorizontalAlignment(SwingConstants.CENTER); label12.setBounds(new Rectangle(210, 212, 60, 57); label12.setFont(new Font(Dialog, , 14); label12.setHorizontalAlignment(SwingConstants.CENTER); labe

23、l11.setBounds(new Rectangle(123, 212, 60, 57); label11.setFont(new Font(Dialog, , 14); label11.setHorizontalAlignment(SwingConstants.CENTER); label10.setBounds(new Rectangle(36, 212, 60, 57); label10.setFont(new Font(Dialog, , 14); label10.setHorizontalAlignment(SwingConstants.CENTER); jContentPane

24、= new JPanel(); jContentPane.setLayout(null); for (int i = 0; i label1.length; i+) jContentPane.add(label1i, null); jContentPane.add(jLabel2, null); jContentPane.add(jLabel3, null); jContentPane.add(jLabel31, null); jContentPane.add(jLabel32, null); jContentPane.add(jLabel33, null); jContentPane.add

25、(jLabel34, null); jContentPane.add(jLabel35, null); jContentPane.add(jLabel36, null); jContentPane.add(jLabel37, null); jContentPane.add(jLabel4, null); jContentPane.add(getJTextField(), null); jContentPane.add(getJButton(), null); jContentPane.add(getJButton1(), null); jContentPane.add(getJButton2(

26、), null); jContentPane.add(getJButton3(), null); jContentPane.add(jLabel5, null); jContentPane.add(getJPanel(), null); return jContentPane; /輸入查找數(shù)據(jù)的文本框 private JTextField getJTextField() if (jTextField = null) jTextField = new JTextField(); jTextField.setBounds(new Rectangle(153, 74, 177, 37); jText

27、Field.setFont(new Font(Dialog, , 14); return jTextField; /查找按鈕,事件處理 private JButton getJButton() if (jButton = null) jButton = new JButton(); jButton.setBounds(new Rectangle(361, 76, 112, 34); jButton.setFont(new Font(Dialog, , 14); (查找該數(shù)); jButton.addActionListener(new () Override public void e) St

28、ring s = (); if (!() jLabel2.setVisible(false); jLabel2.setLocation(oldx, jLabel2.getY(); jButton1.setEnabled(false); isMove = true; int searchNum = Integer.parseInt(s); /要查找的數(shù)值等于將字符串轉(zhuǎn)換成整形 thread = new Bin_search(searchNum); thread.setDaemon(true); (); jButton3.setEnabled(true); jButton2.setEnabled(

29、false); ); return jButton; /產(chǎn)生隨機(jī)數(shù)按鈕 private JButton getJButton1() if (jButton1 = null) jButton1 = new JButton(); jButton1.setBounds(new Rectangle(494, 77, 150, 34); jButton1.setText(產(chǎn)生隨機(jī)數(shù)); jButton1.setFont(new Font(Dialog, Font.ITALIC, 15); jButton1.addActionListener(new java.awt.event.ActionListen

30、er() Override public void e) jLabel2.setVisible(false); jLabel2.setLocation(oldx, jLabel2.getY(); LinkedList list = new LinkedList(); int temp = 0; for (int i = 0; i label1.length; i+) temp = (int) () * 100); while (list.contains(temp) temp = (int) () * 100); list.add(temp); arrayi = temp; label1i.s

31、etText(String.valueOf(arrayi); for (int i = 0; i list.size(); i+) System.out.print(list.get(i) + ); System.out.println(); ); return jButton1; /繼續(xù)查找按鈕 private JButton getJButton2() if ( jButton2 = null) jButton2 = new JButton(); jButton2.setBounds(new Rectangle(466, 492, 142, 42); jButton2.setText(繼續(xù)

32、查找); jButton2.setEnabled(false); jButton2.setFont(new Font(Dialog, , 14); jButton2.addActionListener(new () public void e) jButton2.setEnabled(false); jButton3.setEnabled(true); isMove = true; Bin_notifly(); ); return jButton2; /暫停查找按鈕 private JButton getJButton3() if (jButton3 = null) jButton3 = ne

33、w JButton(); jButton3.setBounds(new Rectangle(615, 492, 127, 42); jButton3.setText(暫停查找); jButton3.setEnabled(false); jButton3.setFont(new Font(Dialog, , 14) /暫停查找的按鈕字體為粗體字 jButton3.addActionListener(new () public void e) jButton2.setEnabled(true); jButton3.setEnabled(false); isMove = false; ); retu

34、rn jButton3; /速度調(diào)節(jié)器 private JPanel getJPanel() if ( jPanel = null) jLabel1 = new JLabel(); jLabel1.setText(慢); jLabel1.setFont(new Font(Dialog, , 14); jLabel = new JLabel(); (快); jLabel.setFont(new Font(Dialog, , 18); jPanel = new JPanel(); jPanel.setLayout(new FlowLayout(); jPanel.setBounds(new Rec

35、tangle(49, 461, 297, 70); jPanel.setBorder(BorderFactory.createTitledBorder(null, u901fu5ea6u8c03u8282, TitledBorder.DEFAULT_JUSTIFICATION, , new Font(Dialog, , 12), new Color(51, 51, 51); jPanel.add(jLabel, null); jPanel.add(getJSlider(), null); jPanel.add(jLabel1, null); return jPanel; /滑動(dòng)塊 privat

36、e JSlider getJSlider() if ( jSlider = null) jSlider = new JSlider(); time = (); jSlider.addChangeListener(new () Override public void e) time = (); ); return jSlider; public static void main(String args) /多線程 SwingUtilities.invokeLater(new Runnable() Override public void run() DemoBinarySearch appli

37、cation = new DemoBinarySearch(); application.getJFrame().setVisible(true); ); public void sleeping(long time) try Thread.sleep(time); catch (InterruptedException e) (); public void Bin_wait() synchronized (lock) try (); catch (Exception e) (); public void Bin_notifly() synchronized (lock) (); public

38、 void move() if (!isMove) Bin_wait(); class Bin_search extends Thread private int searchNum = 0; private int x; public Bin_search(int searchNum) = searchNum; x = jLabel2.getX(); public void sort() Arrays.sort(array); for (int i = 0; i ; i+) label1i.setText(String.valueOf(arrayi); Override public voi

39、d run() sort(); int mid = 0, low = 0, high = 7; jLabel2.setVisible(true); while (low = high) move(); mid = (low + high) / 2; System.out.println(mid= + mid); jLabel2.setLocation(x + mid * 87, jLabel2.getY(); sleeping(7 * time); if (searchNum = arraymid) (恭喜!您要查找的數(shù)值找到啦!); break; else if (searchNum hig

40、h) JOptionPane.showMessageDialog(null, 很遺憾,沒有找到。); jButton1.setEnabled(true); jButton2.setEnabled(false); jButton3.setEnabled(false); 8.2.3 子任務(wù)3 分塊索引查找1分塊索引查找在許多情況下,可能會(huì)遇到這樣的表,整個(gè)表中的數(shù)據(jù)未必(遞增或遞減)有序,但劃分為假設(shè)干塊后,每一塊中的所有數(shù)據(jù)均小于(或大于)其后面塊中的數(shù)據(jù)。這種特性稱為分塊有序。 對(duì)于分塊有序表的查找,顯然不能采用二分查找方法,但如果采用簡(jiǎn)單順序查找方法查找,又因?yàn)闆]有充分利用所給出的條件而浪費(fèi)

41、時(shí)間。針對(duì)這種情況,可為該順序表建一個(gè)索引表,索引表中為每一塊設(shè)置一索引項(xiàng),每一索引項(xiàng)包括兩個(gè)局部:該塊的起始地址和該塊中最大(或最小)關(guān)鍵字的值(或者是所限定的最大(小)關(guān)鍵字)。將這些索引項(xiàng)按順序排列成一有序表,即為索引表。顯然,索引表是按關(guān)鍵字遞增或遞減次序排列的。圖8-1所示是分塊索引查找的演示界面。圖8-1 分塊索引查找的演示界面 2分塊索引查找算法分塊索引查找算法如下:(1) 在索引表中查找以確定數(shù)據(jù)所在的塊。(2) 在所確定的塊中進(jìn)行查找。由于索引表是按關(guān)鍵字遞增(或遞減)有序的,因此在索引表的查找即可采用簡(jiǎn)單順序方式查找,也可以采用二分查找,這要取決于索引表的項(xiàng)數(shù):如果項(xiàng)數(shù)過多

42、,那么采用二分查找是適宜的,否那么采用順序查找就可以了。在塊內(nèi)的查找,由于塊內(nèi)數(shù)據(jù)的無序而只能采用簡(jiǎn)單順序查找。3分塊索引查找算法分析這種帶有索引的分塊有序查找的時(shí)間性能取決于兩步查找時(shí)間之和:如前所述,第一步可用簡(jiǎn)單方式和二分查找方法之一進(jìn)行,第二步只能采用簡(jiǎn)單順序查找,但由于子表長(zhǎng)度較原來長(zhǎng)度小,因此,其時(shí)間性能介于順序查找和二分查找之間。 8.3 任務(wù)三 二叉排序樹查找在一棵二叉樹中查找一個(gè)節(jié)點(diǎn),需要在遍歷二叉樹的過程中對(duì)節(jié)點(diǎn)逐個(gè)進(jìn)行比較。8.3.1 子任務(wù)1 認(rèn)識(shí)二叉排序樹查找有序表中采用二分查找算法查找的速度是比較快的,但也存在問題:假設(shè)要在其中插入或刪除數(shù)據(jù),那么需要移動(dòng)表中所有的

43、后續(xù)數(shù)據(jù)以保持其有效性。假設(shè)這種插入和刪除是經(jīng)常性的運(yùn)算,那么較浪費(fèi)時(shí)間。為此,可采用動(dòng)態(tài)鏈表結(jié)構(gòu),二叉排序樹便是一種適宜的結(jié)構(gòu)。1二叉排序樹二叉排序樹(binary sort tree)可以是一棵空樹或者具有以下性質(zhì):(1) 每個(gè)節(jié)點(diǎn)都有一個(gè)作為查找依據(jù)的關(guān)鍵字,所有節(jié)點(diǎn)的關(guān)鍵字互不相同。(2) 假設(shè)一個(gè)節(jié)點(diǎn)的左子樹不空,那么左子樹上所有節(jié)點(diǎn)的關(guān)鍵字均為小于這個(gè)節(jié)點(diǎn)的鍵值。(3) 假設(shè)一個(gè)節(jié)點(diǎn)的右子樹不空,那么右子樹上所有節(jié)點(diǎn)的關(guān)鍵字均為大于這個(gè)節(jié)點(diǎn)的鍵值。(4) 每個(gè)節(jié)點(diǎn)的左、右子樹也分別為二叉排序法。對(duì)二叉排序樹按中根次序遍歷,可得到按升序排列的關(guān)鍵字序列。2二叉排序樹查找在一棵二叉排序

44、樹中,查找值為key的節(jié)點(diǎn):(1) 從根節(jié)點(diǎn)開始,設(shè)p指向根節(jié)點(diǎn)。(2) 將key與p節(jié)點(diǎn)的關(guān)鍵字進(jìn)行比較,假設(shè)兩者相等,那么查找成功;假設(shè)key值較小,那么在p的左子樹中繼續(xù)查找;假設(shè)key值較大,那么在p的右子樹中繼續(xù)查找。(3) 重復(fù)執(zhí)行上一步,直到查找成功或p為空,假設(shè)p為空,那么查找不成功。3二叉排序樹的查找性能分析在一棵具有n個(gè)節(jié)點(diǎn)的二叉排序樹中查找一個(gè)節(jié)點(diǎn),一次成功的查找恰好走過一條從根節(jié)點(diǎn)到該節(jié)點(diǎn)的路徑,比較次數(shù)為該節(jié)點(diǎn)的層次level(1levelk,k為這棵二叉排序樹的高度)。因此,二叉排序樹查找成功的平均查找長(zhǎng)度ASL不超過二叉樹的高度。二叉樹的高度與二叉樹的形態(tài)有關(guān),n

45、個(gè)節(jié)點(diǎn)的完全二叉樹的高度最小,高度為int(lbn)+1;n個(gè)節(jié)點(diǎn)的單支二叉樹的高度最大,高度為n。因此二叉樹的高度范圍是lbn+1n。8.3.2 子任務(wù)2 二叉排序樹查找的圖形演示工程以下是二叉排序樹的查找圖形演示過程,文件名為,代碼量為570行,以下是完整代碼(供參考):package ch8Search;/圖形演示二叉排序樹查找import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;impo

46、rt .*;import ;import ;import ;import ;import ;public class DemoBiTreeSearch private JFrame jFrame = null; private JPanel jContentPane = null; private JLabel jLabel15 = null; private JLabel jLabel151 = null; private JLabel jLabel152 = null; private JLabel jLabel153 = null; private JLabel jLabel154 =

47、null; private JLabel jLabel155 = null; private JLabel jLabel156 = null; private JLabel jLabel17 = null; private JTextField jTextField = null; private JButton jButton = null; private JScrollPane jScrollPane = null; private JList jList = null; private JLabel jLabel18 = null; private JLabel jLabel = ne

48、w JLabel15; private int s = 3, 4, 1, 6, 5, 11, 31, 12, 9, 10, 2, 13, 32, 15, 14; private long time = 500L; private DefaultListModel lItemsForList1; private JLabel jLabel157 = null; private JLabel jLabel158 = null; private JLabel jLabel159 = null; private JLabel jLabel1510 = null; private JLabel jLab

49、el1511 = null; private JLabel jLabel1512 = null; private JLabel jLabel1513 = null; private JButton jButton1 = null; private JPanel jPanel = null; private JLabel jLabel1 = null; private JSlider jSlider = null; private JLabel jLabel2 = null; /界面設(shè)計(jì)框架的實(shí)現(xiàn) private JFrame getJFrame() if (jFrame = null) jFr

50、ame = new JFrame(); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jFrame.setBounds(new Rectangle(0, 0, 800, 800); jFrame.setContentPane(getJContentPane(); jFrame.setTitle(Application); return jFrame; /初始化面板 private JPanel getJContentPane() if (jContentPane = null) for (int i = 0; i jLabel.l

51、ength; i+) jLabeli = new JLabel(); jLabel18 = new JLabel(); jLabel18.setBounds(new Rectangle(517, 23, 86, 32); jLabel18.setText(對(duì)照列表如有右所示); jLabel17 = new JLabel(); jLabel17.setBounds(new Rectangle(87, 25, 97, 37); jLabel17.setHorizontalAlignment(SwingConstants.CENTER); jLabel17.setText(請(qǐng)輸入您要查找的數(shù)值:)

52、; jLabel1513 = new JLabel(); jLabel1513.setBounds(new Rectangle(664, 366, 37, 31); jLabel1513.setHorizontalAlignment(SwingConstants.CENTER); jLabel1513.setFont(new Font(Dialog, , 18); jLabel1513.setText(); jLabel1512 = new JLabel(); jLabel1512.setBounds(new Rectangle(584, 367, 46, 33); jLabel1512.se

53、tHorizontalAlignment(SwingConstants.CENTER); jLabel1512.setFont(new Font(Dialog, , 18); jLabel1512.setText(); jLabel1511 = new JLabel(); jLabel1511.setBounds(new Rectangle(476, 365, 41, 36); jLabel1511.setHorizontalAlignment(SwingConstants.CENTER); jLabel1511.setFont(new Font(Dialog, , 18); jLabel15

54、11.setText(); jLabel1510 = new JLabel(); jLabel1510.setBounds(new Rectangle(402, 370, 39, 28); jLabel1510.setHorizontalAlignment(SwingConstants.CENTER); jLabel1510.setFont(new Font(Dialog, , 18); jLabel1510.setText(); jLabel159 = new JLabel(); jLabel159.setBounds(new Rectangle(284, 374, 58, 28); jLa

55、bel159.setHorizontalAlignment(SwingConstants.CENTER); jLabel159.setFont(new Font(Dialog, , 18); jLabel159.setText(); jLabel158 = new JLabel(); jLabel158.setBounds(new Rectangle(218, 374, 49, 27); jLabel158.setHorizontalAlignment(SwingConstants.CENTER); jLabel158.setFont(new Font(Dialog, , 18); jLabe

56、l158.setText(); jLabel157 = new JLabel(); jLabel157.setBounds(new Rectangle(136, 368, 41, 33); jLabel157.setHorizontalAlignment(SwingConstants.CENTER); jLabel157.setFont(new Font(Dialog, , 18); jLabel157.setText(); jLabel156 = new JLabel(); jLabel156.setBounds(new Rectangle(48, 372, 49, 30); jLabel1

57、56.setHorizontalAlignment(SwingConstants.CENTER); jLabel156.setFont(new Font(Dialog, , 18); jLabel156.setText(); jLabel155 = new JLabel(); jLabel155.setBounds(new Rectangle(559, 269, 58, 40); jLabel155.setHorizontalAlignment(SwingConstants.CENTER); jLabel155.setFont(new Font(Dialog, , 18); jLabel155

58、.setText(); jLabel154 = new JLabel(); jLabel154.setBounds(new Rectangle(454, 270, 48, 34); jLabel154.setHorizontalAlignment(SwingConstants.CENTER); jLabel154.setFont(new Font(Dialog, , 18); jLabel154.setText(); jLabel153 = new JLabel(); jLabel153.setBounds(new Rectangle(212, 284, 64, 24); jLabel153.

59、setHorizontalAlignment(SwingConstants.CENTER); jLabel153.setFont(new Font(Dialog, , 18); jLabel153.setText(); jLabel152 = new JLabel(); jLabel152.setBounds(new Rectangle(120, 284, 65, 22); jLabel152.setHorizontalAlignment(SwingConstants.CENTER); jLabel152.setFont(new Font(Dialog, , 18); jLabel152.se

60、tText(); jLabel151 = new JLabel(); jLabel151.setBounds(new Rectangle(439, 174, 50, 44); jLabel151.setHorizontalAlignment(SwingConstants.CENTER); jLabel151.setFont(new Font(Dialog, , 18); jLabel151.setText(); jLabel15 = new JLabel(); jLabel15.setBounds(new Rectangle(228, 175, 47, 29); jLabel15.setHor

溫馨提示

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