📄 demo.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 + -