資料結構筆記5 隊列

來源:互聯網
上載者:User
隊列的概念和定義

定義:

隊列是只允許在一端進行插入,另一端進行刪除的線性表。

他所有的插入操作均限定在表的一端進行,該端稱為隊尾

所有的刪除操作則限定在另一端進行,該端則稱為對頭

基本操作:

  • 入隊:將一個資料插入到隊尾的操作。
  • 出隊:讀取隊頭結點資料並刪除該結點的操作


順序隊列的兩個指標與隊列中資料元素的關係圖

迴圈順序隊列

迴圈順序隊列操作

 

隊列的實現
using System;namespace EveryDayStudy.資料結構{public class DAPQueue{private object[] _array; //存放元素的數組private int _growFactor; //增長因子private int _head;//隊頭指標private const int _MinimumGrow = 4;//最小增長值private const int _ShrinkThreshold = 0x20;//初始容量private int _size;//指示元素個數private int _tail;//隊尾指標public DAPQueue() : this(_ShrinkThreshold, 2f){}public DAPQueue(int capacity,float growFactor){if (capacity<0){throw new ArgumentOutOfRangeException("capacity","初始容量不能小於0");}if (growFactor<1.0|| growFactor>10.0){throw  new ArgumentOutOfRangeException("growFactor","增長因子必須在1.0到是10.0之間");}_array = new object[capacity];_head = 0;_tail = 0;_size = 0;_growFactor = (int) (growFactor*100f);}/// <summary>/// 出隊/// </summary>/// <returns></returns>public virtual object Dequeue(){if (_size ==0){throw  new InvalidOperationException("隊列為空白。"); //隊下溢}object obj2 = _array[_head];_array[_head] = null;//刪除出隊指標_head = (_head + 1)%_array.Length; //移動隊頭指標_size--;return obj2;}/// <summary>/// 入隊/// </summary>/// <param name="obj"></param>public virtual void Enqueue(object obj){if (_size == _array.Length){int capacity = (int)((_array.Length*_growFactor)/100L);if (capacity <(_array.Length+_MinimumGrow)){capacity = _array.Length + _MinimumGrow;}SetCapacity(capacity);}_array[_tail] = obj;_tail = (_tail + 1)%_array.Length;_size++;}/// <summary>/// 記憶體搬家/// </summary>/// <param name="capacity"></param>private void SetCapacity(int capacity){//在記憶體中開闢新空間object[] destinationArray = new object[capacity];if (_head<_tail){//當頭指標在尾指標前面時Array.Copy(_array,_head,destinationArray,0,_size);}//當頭指標在尾指標後面時else{//先搬頭指標後面的元素再搬數組頭部到尾指標之間的元素Array.Copy(_array, _head, destinationArray, 0, _array.Length - _head);Array.Copy(_array, 0, destinationArray, _array.Length - _head, _tail);}_array = destinationArray;_head = 0;_tail = (_size == capacity) ? 0 : _size;}/// <summary>/// 元素個數/// </summary>public  virtual  int Count{get{return _size;}}}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.