私はチュートリアルを読んでいて、私はグーグル上を見渡しましたが、リンクされたリストの仕組みについての詳細な解説が見つかりませんでした...私は構造/フォーマットについて本当に混乱しています。彼らが素晴らしいと思うように私に感謝しました、サイズ変更可能であり、変更可能な配列である...あなたが私が何を話しているのかを知る必要がある場合は、私はツタンカーメンからいくつかのコードです。私は方法を追加する方法や削除する方法、彼らが何をするのか、リストの仕事の中でどのように尾を立てるかなどの方法について混乱しています...リンクされたリストはどのように機能しますか?
助けてください混乱..
class ListEntry
{
int data;
ListEntry next;
public ListEntry(int d)
{
data = d;
next = null;
}
public int Data
{
get{ return data; }
set{ data = value; }
}
public ListEntry Next
{
get{ return next; }
set{ next = value; }
}
public override string ToString()
{
return(data.ToString());
}
}
class TestProgram
{
static void Main()
{
List list = new List();
list.Append(3);
Console.WriteLine(list);
list.Append(1);
Console.WriteLine(list);
list.Append(6);
Console.WriteLine(list);
list.Prepend(4);
Console.WriteLine(list);
// continued…
// Continued…
list.Prepend(5);
Console.WriteLine(list);
list.DeleteFirst(4);
Console.WriteLine(list);
list.Prepend(2);
Console.WriteLine(list);
Console.WriteLine("Head data = " + list.Head);
Console.WriteLine("Tail data = " + list.Tail);
list.Clear();
Console.WriteLine(list);
Console.WriteLine("IsEmpty = " + list.IsEmpty);
}
}
using System;
class List
{
ListEntry head;
ListEntry tail;
class ListEntry
{
// Put declaration of ListEntry here. Nesting of the classes is valid. In fact, class nesting is
// preferable if one class is only used within the context of another class.
}
public List()
{
head = null;
tail = null;
}
// Continued…
public int Head
{
get{ return head.Data; }
}
public int Tail
{
get{ return tail.Data; }
}
public bool IsEmpty
{
get{ return(head == null); }
}
public override string ToString()
{
string tmp = "";
ListEntry current = head;
if(current == null)
{
tmp = "Empty";
}
while(current != null)
{
tmp += current + " ";
current = current.Next;
}
return(tmp);
}
public void Append(int i)
{
ListEntry tmp = new ListEntry(i);
tmp.Next = null;
if(head == null)
{
head = tmp;
}
else
{
tail.Next = tmp;
}
tail = tmp;
}
public void Prepend(int i)
{
ListEntry tmp = new ListEntry(i);
tmp.Next = head;
if(head == null)
{
tail = tmp;
}
head = tmp;
}
public void DeleteFirst(int i)
{
ListEntry current = head;
ListEntry previous = null;
while(current != null && current.Data != i)
{
previous = current;
current = current.Next;
}
if(current == null)
{
throw new ArgumentException("List entry not found");
}
// Continued…
// Continued…
if(current == head)
{
head = current.Next;
}
else
{
previous.Next = current.Next;
}
if(current == tail)
{
tail = previous;
}
}
ような他の方法がある: ソート()メソッド A関数は、FindFirst()メソッド A FindNextの()メソッド アンのinsertBefore()メソッド アンInsertAfter()メソッド
しかし、今のところ彼は基本的なものです。
はこの宿題ですか?もしそうなら、そのようにタグを付けてください。 – FishBasketGordo
http://en.wikipedia.org/wiki/Linked_listを試しましたか? –
写真とすべてのもの:http://en.wikipedia.org/wiki/Linked_list –