資料結構,資料結構與演算法

來源:互聯網
上載者:User

資料結構,資料結構與演算法
隊列的基本概念

1 隊列的基本概念
隊列(Queue):也是運算受限的線性表。是一種先進先出(First In First Out ,簡稱FIFO)的線性表。只允許在表的一端進行插入,而在另一端進行刪除。
隊首(front) :允許進行刪除的一端稱為隊首。
隊尾(rear) :允許進行插入的一端稱為隊尾。
  例如:排隊購物。作業系統中的作業排隊。先進入隊列的成員總是先離開隊列。
隊列中沒有元素時稱為空白隊列。在空隊列中依次加入元素a1, a2, …, an之後,a1是隊首元素,an是隊尾元素。顯然退出隊列的次序也只能是a1, a2, …, an ,即隊列的修改是依先進先出的原則進行的

隊列的抽象資料類型定義
ADT Queue{資料對象:D ={ ai|ai∈ElemSet,  i=1, 2, …, n, n >= 0} 資料關係:R = {<ai-1, ai> | ai-1, ai∈D,  i=2,3,…,n } 約定a1端為隊首,an端為隊尾。基本操作:Create():建立一個空隊列;EmptyQue():若隊列為空白,則返回true ,否則返回flase ;   ⋯⋯InsertQue(x) :向隊尾插入元素x;DeleteQue(x) :刪除隊首元素x;    } ADT Queue
隊列的靜態順序儲存結構

在非空隊列裡,隊首指標始終指向隊頭元素,而隊尾指標始終指向隊尾元素的下一位置。
順序隊列中存在“假溢出”現象。因為在入隊和出隊操作中,頭、尾指標只增加不減小,致使被刪除元素的空間永遠無法重新利用。因此,儘管隊列中實際元素個數可能遠遠小於數組大小,但可能由於尾指標巳超出向量空間的上界而不能做入隊操作。該現象稱為假溢出。

迴圈隊列

迴圈隊列:將為隊列分配的向量空間看成為一個首尾相接的圓環,並稱這種隊列為迴圈隊列(Circular Queue)。
特點:
克服上述“假溢出”現象,充分利用向量空間
出隊、入隊操作,隊首、隊尾指標仍要加1,朝前移動
當隊首、隊尾指標指向向量上界(MAX_QUEUE_SIZE-1)時,其加1操作的結果是指向向量的下界0

2  入隊操作Status Insert_CirQueue(SqQueue  Q , ElemType  e)  /*  將資料元素e插入到迴圈隊列Q的隊尾  */{  if  ((Q.rear+1)%MAX_QUEUE_SIZE== Q.front)return  ERROR;      /*  隊滿,返回錯誤標誌    */Q.Queue_array[Q.rear]=e ;   /*  元素e入隊  */Q.rear=(Q.rear+1)% MAX_QUEUE_SIZE ; /*  隊尾指標向前移動  */return OK;        /*  入隊成功    */}
2  入隊操作(正確)Status Insert_CirQueue(SqQueue  *Q , ElemType  e)  /*  將資料元素e插入到迴圈隊列Q的隊尾  */{  if  ((Q->rear+1)%MAX_QUEUE_SIZE== Q-> front)return  ERROR;      /*  隊滿,返回錯誤標誌    */Q-> Queue_array[Q-> rear]=e ;   /*  元素e入隊  */Q-> rear=(Q-> rear+1)% MAX_QUEUE_SIZE ; /*  隊尾指標向前移動  */return OK;        /*  入隊成功    */}
3  出隊操作Status Delete_CirQueue(SqQueue  Q, ElemType  *x )   /*  將迴圈隊列Q的隊首元素出隊  */{   if  (Q.front== Q.rear)return ERROR ;       /*  隊空,返回錯誤標誌    */*x=Q.Queue_array[Q.front] ;  /* 取隊首元素 */Q.front=(Q.front+1)% MAX_QUEUE_SIZE ;     /*  隊首指標向前移動  */return OK ;}
3  出隊操作(正確)Status Delete_CirQueue(SqQueue  *Q, ElemType  *x )   /*  將迴圈隊列Q的隊首元素出隊  */{   if  (Q-> front== Q-> rear)return ERROR ;       /*  隊空,返回錯誤標誌    */*x= Q-> Queue_array[Q-> front] ;  /* 取隊首元素 */Q-> front=(Q-> front+1)% MAX_QUEUE_SIZE ;     /*  隊首指標向前移動  */return OK ;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.