队列,线性表的区别和用途,及用顺序表和链表实现队列"/>
栈,队列,线性表的区别和用途,及用顺序表和链表实现队列
一、栈,队列,线性表的区别
栈相对只有入栈和出栈操作,队列相对也只有入队和出队操作,相对于线性表而言,站和队列是操作受限的线性表。
栈:先进后出。用于调用函数,网页访问等等。
队列:先进先出,后进后出。当需要按顺序处理元素时。
二、用线性表实现队列
class SeqQueue<T> :IQueueDS<T>{private T[] data;private int count;private int front; //队首,等于第一个元素索引减一private int rear; //队尾,等于最后一个元素索引private int capacity; //容量public SeqQueue(int size){data=new T[size];capacity = size ;rear = -1;front = -1;}public SeqQueue():this(10){}public int Count{get { return count; }}/// <summary>/// 入队/// </summary>/// <param name="item"></param>public void Enqueue(T item){if (count < capacity){//如果队尾达到顶端if (rear == capacity-1){rear = 0;}else //如果队尾没有达到顶端{rear++; //队尾位置更新}data[rear] = item; //赋值count++; //元素个数增加}else{Console.WriteLine("已超出界限");}}/// <summary>/// 出队/// </summary>/// <returns></returns>public T Dequeue(){T temp = default(T);if (front == capacity - 1){temp = data[0]; //存储要出队的元素}else{temp = data[front + 1]; //存储要出队的元素}front++; //队首位置更新count--; //元素个数减一return temp;}/// <summary>/// 取得队首的元素/// </summary>/// <returns></returns>public T Peek(){return data[front + 1];}/// <summary>/// 得到队列的长度/// </summary>/// <returns></returns>public int GetLength(){return count;}/// <summary>/// 清空/// </summary>public void Clear(){rear = -1;front = -1;count = 0;}}
}
三、用链表实现队列
class LinkQueue<T>:IQueueDS<T>{private Node<T> head; //头节点private int count; //元素个数private Node<T> rear; //尾节点public LinkQueue(){head = rear = null;count = 0;}public int Count{get { return count; }}/// <summary>/// 入队/// </summary>/// <param name="item"></param>public void Enqueue(T item){Node<T> node=new Node<T>(item);//头节点为空时if (head == null){head = rear = node; //更新头节点和尾节点count++;}else{rear.Next = node; //添加元素rear = node; //更新尾节点count++;}}/// <summary>/// 出队/// </summary>/// <returns></returns>public T Dequeue(){if (head != null){T temp = head.Data;head = head.Next; //更新队首位置count--;return temp;}else{Console.WriteLine("队列为空");return default(T);}}/// <summary>/// 取得对手位置的元素/// </summary>/// <returns></returns>public T Peek(){return head.Data;}/// <summary>/// 得到队列长度/// </summary>/// <returns></returns>public int GetLength(){return count;}/// <summary>/// 队列清空/// </summary>public void Clear(){head = rear = null;count = 0;}}
}
最后运行结果
class Program{static void Main(string[] args){//Queue<string> queue=new Queue<string>();//SeqQueue<string> queue=new SeqQueue<string>();LinkQueue<string> queue=new LinkQueue<string>();queue.Enqueue("南方");queue.Enqueue("北方");queue.Enqueue("俄罗斯");queue.Enqueue("欧洲");queue.Enqueue("世界");Console.WriteLine(queue.Count);string str = queue.Dequeue();Console.WriteLine(str);string str_2 = queue.Dequeue();Console.WriteLine(str_2);Console.WriteLine(queue.Count);string str_3 = queue.Peek();Console.WriteLine(str_3);Console.WriteLine(queue.Count);queue.Clear();Console.WriteLine(queue.Count);Console.ReadKey();}}
更多推荐
栈,队列,线性表的区别和用途,及用顺序表和链表实现队列
发布评论