📄 demo.java
字号:
import java.awt.*;
public class Demo extends Canvas
{
private int sleepTime = 40;
static final int NullPointer = 99999;
private int m_numNodes, m_num;
private String m_data;
private char m_pName[] = {'L','p'};
private boolean m_hasNewNode = false, m_hasData = false, m_hasP = false, m_LP = false;
private int m_newNodePlace = 50, m_nodePlace = 0;
private boolean m_animating = false, m_headNull = false, m_nodeNull = false;
public Demo(int n, String data)
{
m_numNodes = n;
m_data = data;
m_num = -1;
}
public void reset(int n, String data)
{
m_numNodes = n;
m_data = data;
repaint();
m_num = -1;
m_hasNewNode = false; m_hasData = false; m_hasP = false; m_LP = false;
m_newNodePlace = 50; m_nodePlace = 0;
m_animating = false;
m_headNull = false;
m_nodeNull = false;
}
public void create()
{
m_num = 0;
repaint();
}
public void setHeadNull()
{
m_headNull = true;
repaint();
}
public void newNode()
{
m_hasNewNode = true;
m_hasData = false;
m_hasP = false;
repaint();
}
public void setData()
{
m_hasData = true;
repaint();
}
public void setNextPointer()
{
if(m_num>=1) m_hasP = true;
else m_nodeNull = true;
repaint();
}
public void setPointer()
{
m_LP = false;
m_headNull = false;
m_hasP = false;
m_animating = true;
repaint();
}
public void paint(Graphics p1)
{
int baseline = 145;
// draw head node
int d = 300/(m_numNodes+1);
p1.drawLine(d-35, baseline, d-15, baseline);
p1.drawLine(d-15, baseline, d-20, baseline+5);
p1.drawLine(d-15, baseline, d-20, baseline-5);
p1.drawChars(m_pName, 0, 1, d-35, baseline-3);
if( m_num>=0 )
{
p1.drawRect(d-15, baseline-10, 30, 20);
p1.drawLine(d, baseline-10, d, baseline+10);
if(m_LP)
{
p1.drawLine(d+5, baseline, 2*d-15, baseline);
p1.drawLine(2*d-20, baseline+5, 2*d-15, baseline);
p1.drawLine(2*d-20, baseline-5, 2*d-15, baseline);
}
else if(m_headNull)
{
p1.drawLine(d+2, baseline-5, d+12, baseline-5);
p1.drawLine(d+12, baseline-5, d+7, baseline+5);
p1.drawLine(d+2, baseline-5, d+7, baseline+5);
}
else if(m_animating)
{
p1.drawLine(d+5, baseline, d+20, baseline);
p1.drawLine(d+20, baseline, d+20, baseline-m_newNodePlace);
p1.drawLine(d+20, baseline-m_newNodePlace, 2*d-15, baseline-m_newNodePlace);
p1.drawLine(2*d-20, baseline-m_newNodePlace-5, 2*d-15, baseline-m_newNodePlace);
p1.drawLine(2*d-20, baseline-m_newNodePlace+5, 2*d-15, baseline-m_newNodePlace);
}
// draw new node
if( m_hasNewNode )
{
p1.drawRect(2*d-15, baseline-10-m_newNodePlace, 30, 20);
p1.drawLine(2*d, baseline-10-m_newNodePlace, 2*d, baseline+10-m_newNodePlace);
p1.drawLine(2*d-5, baseline-10-m_newNodePlace, 2*d-5, baseline-80);
p1.drawLine(2*d-5, baseline-10-m_newNodePlace, 2*d-5, baseline-15-m_newNodePlace);
p1.drawLine(2*d-5, baseline-10-m_newNodePlace, 2*d, baseline-15-m_newNodePlace);
p1.drawLine(2*d-5, baseline-10-m_newNodePlace, 2*d-10, baseline-15-m_newNodePlace);
p1.drawChars(m_pName, 1, 1, 2*d-5, baseline-82);
if( m_hasData ) p1.drawString(m_data.substring(m_num, m_num+1),
2*d-10, baseline+5-m_newNodePlace);
if( m_hasP )
{
p1.drawLine(2*d+8, baseline-50, 2*d+8, baseline-25);
p1.drawLine(2*d-5, baseline-25, 2*d+8, baseline-25);
p1.drawLine(2*d-5, baseline-25, 2*d-5, baseline-10);
p1.drawLine(2*d-5, baseline-10, 2*d-10, baseline-15);
p1.drawLine(2*d-5, baseline-10, 2*d, baseline-15);
}
else if( m_nodeNull )
{
p1.drawLine(2*d+2, baseline-5-m_newNodePlace, 2*d+12, baseline-5-m_newNodePlace);
p1.drawLine(2*d+12, baseline-5-m_newNodePlace, 2*d+7, baseline+5-m_newNodePlace);
p1.drawLine(2*d+2, baseline-5-m_newNodePlace, 2*d+7, baseline+5-m_newNodePlace);
}
}
// draw other nodes
for(int i=1; i<=m_num; i++)
{
int x = (i+1)*d;
p1.drawRect(x+m_nodePlace-15, baseline-10, 30, 20);
p1.drawLine(x+m_nodePlace, baseline-10, x+m_nodePlace, baseline+10);
p1.drawString(m_data.substring(m_num-i, m_num-i+1), x+m_nodePlace-10, baseline+6);
if( i<m_num )
{
p1.drawLine(x+m_nodePlace+5, baseline, x+m_nodePlace+d-15, baseline);
p1.drawLine(x+m_nodePlace+d-20, baseline+5, x+m_nodePlace+d-15, baseline);
p1.drawLine(x+m_nodePlace+d-20, baseline-5, x+m_nodePlace+d-15, baseline);
}
else
{
p1.drawLine(x+m_nodePlace+2, baseline-5, x+m_nodePlace+12, baseline-5);
p1.drawLine(x+m_nodePlace+12, baseline-5, x+m_nodePlace+7, baseline+5);
p1.drawLine(x+m_nodePlace+2, baseline-5, x+m_nodePlace+7, baseline+5);
}
}
if(m_animating)
{
m_nodePlace += 30/(m_numNodes+1);
m_newNodePlace -= 5;
if(m_newNodePlace<=0)
{
m_animating = false;
m_num ++;
m_newNodePlace = 50;
m_nodePlace = 0;
m_hasNewNode = false;
m_LP = true;
m_nodeNull = false;
}
try{ Thread.sleep(sleepTime); }
catch(InterruptedException e){}
repaint();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -