⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex5.java

📁 java实现最小堆操作
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

import javax.swing.*;

public class Ex5 extends JFrame implements ActionListener
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	JTextField field1;
	JTextField field2;
    JButton buttonAppend;
    JButton buttonDelete;
    JButton buttonelem[][];
 
    Container container;
    int Column=1;
    int count=1;
    int countleft=1;
    Heap heapNow;
    Vector<Integer> value=new Vector<Integer>(1);
	
	Ex5()
    {
        super("数据结构实验5--最小堆操作040824409解旻");
        field1 = new JTextField(5);
        field2=new JTextField(3);
        buttonAppend = new JButton("添加新元素");
        buttonDelete = new JButton("删除堆顶");

        JPanel jpanel = new JPanel();
        jpanel.setLayout(new GridLayout(1, 4, 15, 0));
        jpanel.add(new JLabel("待添加的整数[-999, 999]:"));
        jpanel.add(field1);
        jpanel.add(buttonAppend);
        buttonAppend.addActionListener(this);
        jpanel.add(buttonDelete);
        buttonDelete.addActionListener(this);
       
        container = getContentPane();
        container.add(jpanel, "North");
        
        container.add(new JLabel("按照最小堆算法进行操作,操作结果将在堆中显示"), "South");
        buttonAppend.setEnabled(true);
        buttonDelete.setEnabled(false);
        setSize(1020, 400);
        setDefaultCloseOperation(3);
        setVisible(true);

    }

    public void actionPerformed(ActionEvent actionevent)
    {
        JButton jbutton = (JButton)actionevent.getSource();
        if(jbutton == buttonAppend)
        {
            String s = field1.getText();
            s = s.trim();
            int num = 0;
            try
            {
                num = Integer.parseInt(s);
            }
            catch(NumberFormatException numberformatexception)
            {
                JOptionPane.showMessageDialog(this, "您所输入的内容不能转换成整数,请修改");
                return;
            }
            if(num < -999 || num > 999)
            {
                JOptionPane.showMessageDialog(this, "您所输的内容不在[-999, 999]之间,请修改");
                return;
            }
            
            if(count==31)
            	buttonAppend.setEnabled(false);
            
            if(count==countleft*2){
            	countleft=count;
            	Column++;
            }
            
            value.setSize((int)(Math.pow(2, (double)Column)-1));
            value.set(count-1, num);
            
            heapNow=new Heap(value);
            heapNow.HeapSort();
            count++;
            showHeap(heapNow);
            
            buttonDelete.setEnabled(true);
            field1.requestFocus();
            field1.selectAll();
            return;
        }
        if(jbutton == buttonDelete)
        {
        	if(count-1==countleft){
            	countleft=countleft/2;
            	Column--;
            }
        	count--;
        	if(count==1){
        		container.add(new JButton("Empty Heap"),"Center");
        		buttonDelete.setEnabled(false);
        		container.validate();
        		countleft=1;
        		Column=1;
        		return;
        	}
        	heapNow.HeapDel();
            showHeap(heapNow);
            
            buttonAppend.setEnabled(true);
            return;
        } else
        {
            return;
        }
    }
    
    public void showHeap(Heap heap){
    	 JPanel ajpanel[] = new JPanel[Column];
         for(int i = 0; i < Column ; i++){
         	ajpanel[i] = new JPanel();
         	ajpanel[i].setLayout(new GridLayout(1,(int)(Math.pow(2, (double)i))));
         }
        
     
        
         buttonelem = new JButton[Column][];
         int j = 1;
         for(int k = 0; k <Column ; k++)
         {
             buttonelem[k] = new JButton[j];
             for(int l = 0; l < j; l++)
             {
                 buttonelem[k][l] = new JButton();
                 buttonelem[k][l].setEnabled(false);
                 ajpanel[k].add(buttonelem[k][l]);
                 try{
                	 if(heap.val.get((int)(Math.pow(2, (double)k)-1+l))!=null)
                		 buttonelem[k][l].setText(String.valueOf(heap.val.get((int)(Math.pow(2, (double)k)-1+l))));
                 }catch(ArrayIndexOutOfBoundsException exp){
                	 
                 }
             }

             j *= 2;
         }
         JPanel jpanel1 = new JPanel();
         
         jpanel1.setLayout(new GridLayout(Column, 1));
         for(int i = 0; i < Column; i++)
             jpanel1.add(ajpanel[i]);
         JScrollPane jscrollpane = new JScrollPane(jpanel1);
         
         container.add(jscrollpane, "Center");
         container.validate();
    	
    }



    public static void main(String args[])
    {
        new Ex5();
    }  
    
}

class Heap{
	Vector<Integer> val;
	Heap(Vector<Integer>value){
		val=value;
	}
	
	public void HeapAdjust(int s,int m){
		int rc=val.get(s-1);
		for(int j=2*s;j<=m;j*=2){
			if(j<m&&val.get(j-1)>val.get(j))
				++j;
			if(rc<val.get(j-1))
				break;
			val.set(s-1, val.get(j-1));
			s=j;
		}
		val.set(s-1, new Integer(rc));
	}
	
	public void HeapSort(){
		int tot=0;
		for(int i=0;i<val.size();i++){
			if(val.get(i)!=null)
				tot++;
			
		}
		
		
		for(int i=tot/2;i>0;--i){
			HeapAdjust(i,tot);
		}
	}
	
	public void HeapDel(){
		int tot=0;
		for(int i=0;i<val.size();i++){
			if(val.get(i)!=null)
				tot++;
			
		}
		val.set(0, val.get(tot-1));
		val.setSize(tot-1);
		
		HeapAdjust(1,tot-1);

	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -