链表 (Linked List)
是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域
namespace Queue
{
/// <summary>
/// Implement Queue in Array.
/// </summary>
class Queue
{
private int[] items;
private int count;
/// <summary>
/// Initial Queue.
/// </summary>
/// <param name="capability"></param>
public Queue(int capability)
{
//capability should always bigger than 0.
if (capability > 0)
items = new int[capability];
else
throw new IndexOutOfRangeException("Array should be more than 0.");
this.count = 0;
}
/// <summary>
/// Add Item at the end of Queue.
/// </summary>
/// <param name="item"></param>
public void EnQueue(int item)
{
MoveAllNext();
items[0] = item;
this.count++;
}
/// <summary>
/// Delete item at the front of Queue.
/// Return the deleted item of Queue.
/// </summary>
/// <returns></returns>
public int DeQueue()
{
int temp = items[count - 1];
items[count - 1] = 0;
count--;
return temp;
}
/// <summary>
/// Return the front item of Queue without deleting.
/// </summary>
/// <returns></returns>
public int Peek()
{
if (count > 0 && count <= items.Length)
return items[count - 1];
else
throw new IndexOutOfRangeException("Count is out of Array Range.");
}
/// <summary>
/// If Queue is Full, return true.
/// </summary>
/// <returns></returns>
public bool IsFull()
{
return this.count == items.Length ? true : false;
}
/// <summary>
/// If Queue is Empty, return true.
/// </summary>
/// <returns></returns>
public bool IsEmpty()
{
return this.count == 0 ? true : false; ;
}
/// <summary>
/// Move All Items in Array to next sequently.
/// the last element in Array will move out of Array.
/// </summary>
private void MoveAllNext()
{
if (count == 0)
return;
else if (count > 0 && count <= items.Length)
{
int[] temp = new int[items.Length];
temp[0] = 0;
for (int i = 1; i < count; i++)
{
temp[i] = items[i - 1];
}
items = temp;
}
else
throw new IndexOutOfRangeException("Count is out of Array Range.");
}
/// <summary>
/// Move All Items in Array to front sequently.
/// the original element in Array will be over writed.
/// </summary>
private void MoveAllFront()
{
if (count == 0)
return;
else if (count > 0 && count <= items.Length)
{
int[] temp = new int[items.Length];
for (int i = 1; i < count; i++)
{
temp[i - 1] = items[i];
}
items = temp;
}
else
throw new IndexOutOfRangeException("Count is out of Array Range.");
}
}
}
namespace LinkList
{
class LinkList
{
private int count;
private Node current;
private Node first;
private Node last;
public LinkList()
{
count = 0;
}
public LinkList(Node node)
{
this.current = node;
this.first=node;
count = 0;
Node temp = node;
while (temp != null)
{
this.last = temp;
temp = temp.next;
count++;
}
}
public int Count
{
get { return Count; }
}
/// <summary>
/// First Node
/// </summary>
public Node First
{
get
{
//if fist is null
if (first == null)
throw new NullReferenceException("first node is null");
else
return first;
}
}
/// <summary>
/// Last Node
/// </summary>
public Node Last
{
get
{
//if fist is null
if (last == null)
throw new NullReferenceException("last node is null");
else
return last;
}
}
/// <summary>
/// Get specific vaule node;
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public Node Find(int value)
{
return null;
}
/// <summary>
/// Remove specific value node;
/// </summary>
/// <param name="vaule"></param>
/// <returns></returns>
public bool Remove(int vaule)
{
return true;
}
/// <summary>
/// Clear node;
/// </summary>
public void Clear()
{ }
/// <summary>
/// Add node at last Link List and return new node value;
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
public Node AddLast(Node node)
{
return null;
}
}
class Node
{
public Node(int data)
{
this.Data = data;
}
public Node next;
public int Data;
}
}