/*************************************/
/*★ List Object Class 前田 稔 ★*/
/*************************************/
using System;
class console
{
public static void Main()
{ List pt = new List();
List wp;
for(int i=1; i<10; i++) pt.Push(i);
for(wp=pt.End; wp!=null; wp=pt.Back(wp))
Console.Write("Val={0} ",wp.val);
Console.WriteLine("");
for (wp=pt.Begin; wp!=null; wp=pt.Next(wp))
Console.Write("Val={0} ", wp.val);
System.Console.ReadLine();
}
}
class List
{
public int val; //セルの値
public List ptr; //セルのリンク
public List top; //List の先頭(最後に Push されたセル)
//Constructor
public List()
{ ptr = null;
top = null;
}
//最初に登録されたセル
public List Begin
{
get
{
List wk;
for(wk=top; wk.ptr!=null; wk=wk.ptr);
return wk;
}
}
//最後に登録されたセル
public List End
{
get
{
return top;
}
}
//前のセル
public List Back(List pt)
{
if (pt==null) return null;
return pt.ptr;
}
//次のセル
public List Next(List pt)
{
if (pt==null) return null;
return find_pt(top,pt);
}
//List の先頭に追加
public List Push(int v)
{ List wk;
wk = new List();
wk.val = v;
wk.ptr = top;
top = wk;
return wk;
}
//List の先頭(最後に Push された値)から印字
public void BPrint()
{ List wk;
for(wk=top; wk!=null; wk= wk.ptr)
Console.Write("val= {0} ",wk.val);
}
//List の後部(登録された順)から印字
public void Print()
{
if (top!=null) pnt(top);
}
//★private method
//pt が定義されているセルを探す
List find_pt(List top, List pt)
{
if (top==null) return null;
if (top.ptr == pt) return top;
return find_pt(top.ptr, pt);
}
void pnt(List pt)
{
if (pt==null) return;
pnt(pt.ptr);
Console.Write("val= {0} ",pt.val);
return;
}
}
|