1. 程式人生 > >資料結構之迴圈佇列(面向物件思想c++實現)

資料結構之迴圈佇列(面向物件思想c++實現)

佇列是一種資料結構,它具有先進先出的特點,即FIFO(first in first out)。佇列一般有普通佇列和迴圈佇列兩種形式。我們用陣列來實現佇列,使用一般的普通佇列,當我們把隊頭元素out的時候,隊頭後的元素會逐一向前挪動,這樣就大大降低了處理效率。

這裡寫圖片描述
迴圈佇列不僅提高了效率,而且也提升了空間利用率。迴圈佇列的具體構造如下圖。
迴圈佇列
接下來,我們先定義迴圈佇列中的屬性和方法,然後重點分析兩個方法。在此宣告,我們用陣列來實現一個佇列,且該陣列為int型別陣列。
迴圈佇列的具體程式碼如下:

class MyQueue{
public:
    MyQueue
(int queueCapacity); //初始化構建迴圈佇列 virtual ~MyQueue(); //銷燬佇列 void ClearQueue(); //清空佇列 bool QueueEmpty() const; //判斷佇列是否為空 bool QueueFull(); //判斷佇列是否為滿 int QueueLength() const; // 佇列長度 bool EnQueue(int element); // 向佇列尾部新增元素 bool DeQueue(int &element); //在佇列中刪除隊頭元素 void QueueTraverse(); // 遍歷佇列
private: int *m_pQueue; // 指向一個佇列 int m_iQueueLen; // 佇列長度 int m_iQueueCapacity; //佇列容量 int m_iHead; //隊頭 int m_iTail; //隊尾 };
#include 'MyQueue'
#include <iostream>
using namespace std;
MyQueue::MyQueue(int queueCapacity){
    m_iQueueCapacity = queueCapacity;
    m_pQueue = new
int[m_iQueueCapacity]; ClearQueue(); } MyQueue::~MyQueue(){ delete []m_pQueue; m_pQueue = NULL; } void MyQueue::ClearQueue(){ m_iHead = 0; m_iTail = 0; m_iQueueLen = 0; } bool MyQueue::QueueEmpty() const{ if(0 == m_iQueueLen){ return true; } else{ return false; } } int MyQueue::QueueLength() const{ return m_iQueueLen; } bool MyQueue::QueueFull(){ return m_iQueueLen == queueCapacity ? true : false; } bool MyQueue::EnQueue(int element){ if (QueueFull()) { return 0; } else{ m_pQueue[m_iTail] = element; m_iTail++; m_iTail = m_iTail % m_iQueueCapacity; m_iQueueLen++; return true; } } bool MyQueue::DeQueue(int &element){ if (QueueEmpty()) { return false; } else{ element = m_pQueue[m_iHead]; m_iHead++; m_iHead = m_iHead % m_iQueueCapacity; m_iQueueLen--; return true; } } void MyQueue::QueueTraverse(){ for (int i = m_iHead; i < m_iQueueLen; i++) { cout<<m_pQueue[i % m_iQueueCapacity]<<endl; } }

我們詳解EnQueue(int element)方法(DeQueue(int &element)同理)中的一個重點。
EnQueue(int element):
其中我們每向佇列中新增一個元素的時候,m_iTail就會加1,這樣下去m_iTail就會無限制的繼續變大,而此時我們的處理辦法就是m_iTail = m_iTail % m_iQueueCapacity,這樣每當m_iTail指向超過m_iQueueCapacity的時候,就會得到糾正。

相關推薦

資料結構迴圈佇列(面向物件思想c++實現)

佇列是一種資料結構,它具有先進先出的特點,即FIFO(first in first out)。佇列一般有普通佇列和迴圈佇列兩種形式。我們用陣列來實現佇列,使用一般的普通佇列,當我們把隊頭元素out的時候,隊頭後的元素會逐一向前挪動,這樣就大大降低了處理效率。

資料結構迴圈佇列(SeqQueue)原始碼

SeqQueue.h檔案#pragma once #include<assert.h> #include<iostream> #define defaultSize 20 template<class T> class SeqQueu

資料結構迴圈佇列和棧的應用

前面提到,在佇列的順序儲存結構中,必須要討論順序佇列的陣列越界(或上溢)問題。 根據順序佇列的定義,我們可以很輕鬆的發現,當佇列刪除一個元素之後,即front指標向後移動之時,往往這個時候就有可能出現

資料結構迴圈佇列

懶癌患者迴圈佇列的基本操作實現1.構造迴圈佇列原因:佇列初始化時,令front=rear=0,每當插入一個元素時,“尾指標加1”;刪除一個元素時,“頭指標加1”(注意指標都是加一)。因此,在非空佇列中,頭指標始終指向佇列的頭元素,二尾指標始終指向佇列的尾元素。當刪除一定量的元

PHP與資料結構迴圈佇列

<?php /* * use PHP to write queue * 佇列的順序結構(迴圈佇列,防止假溢位) */ class queue{ //儲存空間 private $data; /

JAVA資料結構迴圈佇列實現

1、迴圈佇列CircleQueue類的實現程式碼如下所示: public class CircleQueue { private Object[] array; private int capac

資料結構順序佇列的操作(C語言)

#include <stdio.h> #include <stdlib.h> #include <string.h> #define QUEUELEN 15 //資料結構的定義 typedef struct { char name[

Trie樹(字典樹、字首樹)面向物件思想C++實現

Trie樹的功能、思想、實現都寫在程式碼註釋中了 使用: Trie trie = new Trie([TypeCase]); trie. TypeCase= Bit //二進位制 Number // 0-9數字 LowerCase //小寫字母

資料結構順序佇列迴圈佇列

由於佇列有元素出列,front就向後移動,所以佇列前面的空間就空了出來。為了更合理的利用空間,人們想了一個辦法:將佇列的首尾相連線。這樣當rear移動到LENGTH時,會再從0開始迴圈。那當什麼時候佇列滿呢?當rear等於front的時候。可是佇列為空的時候也是同樣的條件

軟考:資料結構基礎——迴圈佇列C語言實現

  迴圈佇列得實現: 1.     在入隊和出隊時,我們通過      q->rear = (q->rear +1)%MAX_LENTH 來實現迴圈入隊     q

資料結構堆疊佇列(一)

目錄 資料結構值堆疊佇列           1.堆 2.棧  -- 作業系統在建立某個程序時或者執行緒為這個執行緒建立儲存區域 3.堆、棧區別總結: 4.佇列 5.堆、棧、佇列三者區別 

資料結構迴圈佇列實現

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define TURE 1 #define FALSE 0 #de

Java版資料結構迴圈連結串列的實現

簡介 在指定結點後新增一個結點 刪除指定結點的下一個結點 獲取下一個結點 獲取結點資料 public class LoopNode { int data;//資料域 LoopNode next;//下一個結點 public Loop

資料結構迴圈佇列的應用(一)列印楊輝三角

列印楊輝三角 楊輝三角是比較常見的佇列的應用,下面一行的數是上面2個數字的和,數列首位都是1,高中數學裡牛頓二項式展開式應該有說。 程式碼收穫 這題主要是找規律。利用下面一行比上面一行數字多一個,佇列頭為上一行,除了入隊首尾的1之外,入隊的上一行2個數的和

資料結構迴圈佇列

上次實現了陣列佇列,這次來實現迴圈佇列 迴圈佇列的幾個要點,front指向隊頭元素,tail指向隊尾元素的下一個位置,front=tail時佇列為空,(front+1)% data.Length = tail時佇列為滿,還是會使用第一節所編寫的陣列類做最底層。

重讀資料結構優先順序佇列

佇列是一種先進先出的結構,但優先順序佇列需要對後擠進去的資料進行排序,如果足夠大的話會排至隊首。它可以用來維護一堆資料中最大(最小)的N個數據,在這裡用大頂堆(完全二叉樹)來實現不停輸入整數時找出K個最小的數,通過與堆頂的比較,決定是否頂替堆頂並再次排序。這也是為了給KD樹求

資料結構迴圈佇列的清空、銷燬、求隊長、遍歷、取首元素等操作及運用

資料結構中佇列有好幾種形式,本文寫的是迴圈佇列,以下為原創程式碼。建立c++工程: 標頭檔案一:基本定義和標頭檔案 #include"stdlib.h" #include"stdio.h" #define MAXQSIZE 100 #define OK 1 #defin

資料結構迴圈佇列C語言實現

生活中有很多佇列的影子,比如打飯排隊,買火車票排隊問題等,可以說與時間相關的問題,一般都會涉及到佇列問題;從生活中,可以抽象出佇列的概念,佇列就是一個能夠實現“先進先出”的儲存結構。佇列分為鏈式佇列和靜態佇列;靜態佇列一般用陣列來實現,但此時的佇列必須是迴圈佇列,否則

西北工業大學NOJ資料結構—009迴圈佇列

本題為迴圈佇列的應用,所謂迴圈佇列,就......迴圈的佇列 唄迴圈佇列可以在有限的佇列空間,來回進隊列出佇列,可以節約大量的儲存空間——因為佇列只能從一端進入從另一端彈出,所以若是進進出出(滑稽),就會使彈出佇列的元素原來佔有的位置不能再次被利用但是由於要求使用rear隊尾

資料結構單鏈佇列(鏈式儲存佇列)的實現(C語言)

學習參考: 嚴蔚敏: 《資料結構-C語言版》 基本操作 入隊 出隊 建空佇列 判隊空 獲取隊首元素 獲取佇列長度 清空佇列 程式碼實現 佇列結點定義 typedef stru