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

📄 demo.java

📁 学习数据结构的最好辅助工具,快速帮助你熟悉数据结构的相关技术
💻 JAVA
字号:
import java.awt.*;
public class Demo extends Canvas
{
	private int sleepTime = 40;
	//private boolean dir = true;
	private int m_numNodes, m_numPointers = 0;
	private char m_pointerNames[], m_data[], m_nodeName[], m_nodePName[];
	private boolean m_hasNode, m_hasNodeName;
	private int m_pointerPos[];
	private int m_nodePointer[], m_nodeP;
	private int m_pointerPlace[];
	static final int NullPointer = 99999;
	private int m_pointerMoving;
	
	public Demo(int n, char data[])
	{
		m_numNodes = n;
		m_data = data;
		m_pointerNames = new char[5];
		m_pointerPos = new int[5];
		m_nodePointer = new int[m_numNodes+1];
		m_pointerPlace = new int[5];
		m_nodeName = new char[1];
		m_nodePName = new char[1];
		for(int i=0; i<m_numNodes; i++) m_nodePointer[i] = 0;
		m_nodePointer[m_numNodes] = NullPointer; // tail pointer
	}
	
	public void reset(int n)
	{
		m_numNodes = n;
		m_numPointers = 0;
		m_pointerMoving = NullPointer;
		m_hasNode = false; m_hasNodeName = false;
		m_nodeP = NullPointer;
		for(int i=0; i<m_numNodes; i++) m_nodePointer[i] = 0;
		m_nodePointer[m_numNodes] = NullPointer; // tail pointer
		repaint();
	}
	
	public void addPointer(char pointerName)
	{
		m_pointerNames[m_numPointers] = pointerName;
		m_pointerPos[m_numPointers] = 0;
		m_pointerPlace[m_numPointers] = 300/(m_numNodes+1);
		m_numPointers++;
		repaint();
	}
	
	public int movePointer(char pointerName)
	{
		int i=0;
		while( m_pointerNames[i] != pointerName ) i++;
		m_pointerMoving = i;
		m_pointerPos[i]++;
		repaint();
		if(m_pointerPos[i] <= m_numNodes) return m_pointerPos[i];
		return NullPointer;
	}
	
	public void newNode(char nodePName)
	{
		m_nodePName[0] = nodePName;
		m_hasNode = true;
		repaint();
	}
	
	public void setData(char nodeName)
	{
		m_nodeName[0] = nodeName;
		m_hasNodeName = true;
		repaint();
	}
	
	public void setNodePointer(char pointerName)
	{
		int i=0;
		while( m_pointerNames[i] != pointerName ) i++;
		if(m_pointerPos[i]<m_numNodes)
		{
			m_nodeP = m_pointerPos[i] + 1;
			repaint();
		}
	}
	
	public void setPointer(char pointerName)
	{
		int i=0;
		while( m_pointerNames[i] != pointerName ) i++;
		m_nodePointer[m_pointerPos[i]] = 1;
		repaint();
	}
	
	public void paint(Graphics p1)
	{
		int baseline = 145;
		// draw head node
		int d = 300/(m_numNodes+1);
		p1.drawRect(d-15, baseline-10, 30, 20);
		p1.drawLine(d, baseline-10, d, baseline+10);
		if( m_nodePointer[0] == 0 )
		{
			p1.drawLine( d+5, baseline, 2*d-15, baseline );
			p1.drawLine( 2*d-15, baseline, 2*d-20, baseline-5 );
			p1.drawLine( 2*d-15, baseline, 2*d-20, baseline+5 );
		}
		else if( m_nodePointer[0] == 1)
		{
			p1.drawLine( d+7, baseline, d+7, baseline-60 );
			p1.drawLine( d+7, baseline-60, 157, baseline-60 );
			p1.drawLine( 157, baseline-90, 157, baseline-60 );
			p1.drawLine( 157, baseline-90, 162, baseline-85 );
			p1.drawLine( 157, baseline-90, 152, baseline-85 );
		}
		
		// draw other nodes
		for(int i=1;i<=m_numNodes;i++)
		{
			int x = d * (i+1);
			p1.drawRect(x-15, baseline-10, 30, 20);
			p1.drawChars(m_data, i-1, 1, x-10, baseline+5);
			p1.drawLine(x, baseline-10, x, baseline+10);
			if( m_nodePointer[i] == 0 )
			{
				p1.drawLine( x+5, baseline, x+d-15, baseline );
				p1.drawLine( x+d-15, baseline, x+d-20, baseline-5 );
				p1.drawLine( x+d-15, baseline, x+d-20, baseline+5 );
			}
			else if( m_nodePointer[i] == 1)
			{
				p1.drawLine( x+7, baseline, x+7, baseline-60 );
				p1.drawLine( x+7, baseline-60, 157, baseline-60 );
				p1.drawLine( 157, baseline-90, 157, baseline-60 );
				p1.drawLine( 157, baseline-90, 162, baseline-85 );
				p1.drawLine( 157, baseline-90, 152, baseline-85 );
			}
		}
		
		// draw extra node
		if( m_hasNode )
		{
			p1.drawRect(150, baseline-110, 30, 20);
			p1.drawLine(165, baseline-110, 165, baseline-90);
			if(m_hasNodeName) p1.drawChars(m_nodeName, 0, 1, 155, baseline-95);
			p1.drawLine(130, baseline-100, 150, baseline-100);
			p1.drawChars(m_nodePName, 0 ,1, 122, baseline-97);
			p1.drawLine(145, baseline-105, 150, baseline-100);
			p1.drawLine(145, baseline-95, 150, baseline-100);
			if(m_nodeP != NullPointer)
			{
				int x = d * (m_nodeP+1)-5;
				p1.drawLine(170, baseline-100, 200, baseline-100);
				p1.drawLine(200, baseline-100, 200, baseline-50);
				p1.drawLine(200, baseline-50, x, baseline-50);
				p1.drawLine(x, baseline-50, x, baseline-10);
				p1.drawLine(x-5, baseline-15, x, baseline-10);
				p1.drawLine(x+5, baseline-15, x, baseline-10);
			}
		}
		
		// draw pointers
		for(int i=0; i<m_numPointers; i++)
		{
			int x = m_pointerPlace[i];
			p1.drawLine(x-10, baseline-30, x-10, baseline-10);
			p1.drawChars(m_pointerNames, i ,1, x-10, baseline-34);
			p1.drawLine(x-10, baseline-10, x-15, baseline-15);
			p1.drawLine(x-10, baseline-10, x-5, baseline-15);
		}
		
		// handle pointer movement
		if(m_pointerMoving != NullPointer)
		{
			m_pointerPlace[m_pointerMoving] += 3;
			if( m_pointerPlace[m_pointerMoving] >=
				(m_pointerPos[m_pointerMoving]+1) * 300/(m_numNodes+1) )
			{
				m_pointerPlace[m_pointerMoving] =
				(m_pointerPos[m_pointerMoving]+1) * 300/(m_numNodes+1);
				m_pointerMoving = NullPointer;
			}
			try			{
				Thread.sleep( sleepTime );
			}
			catch(InterruptedException e){}			repaint();		}
	
	}
}

⌨️ 快捷键说明

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