一、非泛型实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Reflection;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Queue s = new Queue();
s.EnQueue(3);
s.EnQueue(4);
s.EnQueue(5);
Console.WriteLine(s.Peek());
Console.WriteLine(s.DeQueue());
}
}
/// <summary>
/// 队列的链式结构基本实现(非泛型)
/// </summary>
public class Queue
{
/// <summary>
/// 元素的上标
/// </summary>
public Node first;
/// <summary>
/// 元素的下标
/// </summary>
public Node tail;
/// <summary>
/// 元素个数
/// </summary>
public int count;
/// <summary>
/// 默认的构造函数
/// </summary>
public Queue()
{
count = 0;
first = null;
tail = null;
}
/// <summary>
/// 入队
/// </summary>
/// <param name="obj"></param>
public void EnQueue(object obj)
{
Node node = new Node(obj);
if (tail != null)
{
tail.next = node;
}
tail = node;
if (first == null)
{
first = tail;
}
count++;
}
/// <summary>
/// 出队
/// </summary>
public object DeQueue()
{
Node node = first;
if (first != null)
{
first = first.next;
}
if (first == null)
{
tail = null;
}
count--;
return node.Data;
}
/// <summary>
/// 查找元素是否存在
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public bool Contains(object obj)
{
bool b = false;
Node node = first;
while (node != null && node.Data != null)
{
if (node.Equals(obj))
{
b = true;
}
node = node.next;
}
return b;
}
/// <summary>
/// 取队首
/// </summary>
public object Peek()
{
if (first == null && tail == null)
{
Console.WriteLine("不存在");
}
return first.Data;
}
}
/// <summary>
/// 节点类
/// </summary>
public class Node
{
public object Data
{
get;
set;
}
internal Node next;
public Node()
{
Data = "";
next = null;
}
public Node(object data, Node next)
{
Data = data;
this.next = next;
}
public Node(object data)
{
Data = data;
next = null;
}
}
}
二、泛型实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Reflection;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Queue<int> s = new Queue<int>();
s.EnQueue(3);
s.EnQueue(4);
s.EnQueue(5);
Console.WriteLine(s.Peek());
Console.WriteLine(s.DeQueue());
}
}
/// <summary>
/// 队列的链式结构基本实现(泛型)
/// </summary>
public class Queue<T>
{
/// <summary>
/// 元素的上标
/// </summary>
public Node<T> first;
/// <summary>
/// 元素的下标
/// </summary>
public Node<T> tail;
/// <summary>
/// 元素个数
/// </summary>
public int count;
/// <summary>
/// 默认的构造函数
/// </summary>
public Queue()
{
count = 0;
first = null;
tail = null;
}
/// <summary>
/// 入队
/// </summary>
/// <param name="obj"></param>
public void EnQueue(T obj)
{
Node<T> node = new Node<T>(obj);
if (tail != null)
{
tail.next = node;
}
tail = node;
if (first == null)
{
first = tail;
}
count++;
}
/// <summary>
/// 出队
/// </summary>
public T DeQueue()
{
Node<T> node = first;
if (first != null)
{
first = first.next;
}
if (first == null)
{
tail = null;
}
count--;
return node.Data;
}
/// <summary>
/// 查找元素是否存在
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public bool Contains(T obj)
{
bool b = false;
Node<T> node = first;
while (node != null && node.Data != null)
{
if (node.Equals(obj))
{
b = true;
}
node = node.next;
}
return b;
}
/// <summary>
/// 取队首
/// </summary>
public T Peek()
{
if (first == null && tail == null)
{
Console.WriteLine("不存在");
}
return first.Data;
}
}
/// <summary>
/// 节点类
/// </summary>
public class Node<T>
{
public T Data
{
get;
set;
}
internal Node<T> next;
public Node(T data, Node<T> next)
{
Data = data;
this.next = next;
}
public Node(T data)
{
Data = data;
next = null;
}
}
}