資料結構-練習3 隊列的數組實現

來源:互聯網
上載者:User

我們知道,隊列是使用的最常見的資料結構之一。常用的隊列的實現有兩種方法,數組和鏈式結構。下面用數組實現以下queue。

包括的實現函數:

                            enqueue(T x)  壓入隊列。

                            getqueue()      擷取隊列元素,但不取出隊列

                            removequeue()  取出隊列元素

                           searchqueue(T x)    查詢元素x  

                            empty()             隊列是否為空白

                            length() 返回隊列長度

使用c++的template 實現。

class 的聲明如下:

                               const int MAXSIZE = 100;                 

               template < class T >             //運用模板類       

                        class queue                         

          {                         

    public:                             

    queue();            //構造一個新的隊列                 

     ~queue();                //解構函式                   

     int enqueue( T x );          //x元素入隊                        

    T getqueue();            //擷取隊頭元素,但不取出                                  

    T removequeue();            //取出隊頭元素                                       

     void searchqueue();         //遍曆隊列中的元素                        

    bool empty();            //判斷隊列是否為空白                                       

    int search( T x );            //尋找元素x                        

    int length();            //檢查隊列長度                               

    private:                                     

    int front,rear;          //隊頭隊尾指標,隊頭指向隊列第一個元素,隊尾指向隊列中最後一個元素

   T data[ MAXSIZE ];       //定義存放隊列元素的數組

};

template < class T > inline queue<T> :: queue()       //初始化隊列,front 和 rear 均設為0{front = rear = 0;data=new T[MAXSIZE];         count=1;}template < class T > inline queue<T> :: ~queue(){}template < class T > inline void queue<T> ::  enqueue( T x ){ int Capacity;if ( rear >= count*MAXSIZE - 1)       //判斷隊列是否已滿{    Capacity=(++count)*MAXSIZE;  T* temp=new T[Capacity];  for(int i=0;i<Capacity-MAXSIZE;++i)  {   temp[i]=data[i];  }  delete [] data;  data=temp;  }data[rear] = x;rear = rear + 1;}template < class T > inline T queue<T> :: getqueue(){if ( front == rear )         throw "溢出";              //隊列為空白時拋出“溢出”return data[front];}template < class T > inline T queue<T> :: removequeue(){if ( front == rear )throw "溢出";T result =data[front];  front = front + 1;return result;}template < class T > inline bool queue<T> :: empty()              //隊列為空白時傳回值為1,不為空白傳回值為0{if ( front == rear )return true;elsereturn false;}template < class T >  inline int queue<T> :: search( T x )        //傳回值為在隊列中尋找到x的次數{int i;int m = 0;for ( i = front; i < rear; ++i)    //從第二個元素開始尋找(第一個元素存放的是隊列長度),直到查到隊尾元素為止{if ( x == data[i] )m = m + 1;}return m;}template < class T > inline int queue<T> :: length(){return rear-front;                  //返回隊首元素}//遍曆隊列template < class T > inline void queue<T> :: searchqueue(){int i;if ( front == rear )std :: cout << "隊列是空的!" << endl;    for ( i = front; i < rear; ++i ){std :: cout << data[i] << " ";}std :: cout << endl;}

測試代碼:

void main(){int x;queue <int> a;cout << "向隊中添加元素1" << endl;a.enqueue( 1 );cout << "向隊中添加元素2" << endl;a.enqueue( 2 );cout << "向隊中添加元素3" << endl;a.enqueue( 3 );cout << "向隊中添加元素4" << endl;a.enqueue( 4 );cout << "向隊中添加元素5" << endl;a.enqueue( 5 );cout << "向隊中添加元素6" << endl;a.enqueue( 6 );cout << "顯示此時的隊首元素:" << a.getqueue() << endl;cout << "刪除此時的隊首元素並輸出該元素為:" << a.removequeue() <<endl;cout << "刪除此時的隊首元素並輸出該元素為:" << a.removequeue() <<endl;cout << "顯示此時的隊首元素:" << a.getqueue() << endl;    cout << "此時的隊列長度為:" << a.length() << endl;cout << "判斷隊列是否為空白(輸出0為空白,1不為空白):" << a.empty() << endl;cout << "遍曆該隊列,依次輸出各個元素:" << endl;a.searchqueue();    cout << "在隊列中尋找5出現的次數為:" << a.search( 5 ) << endl;}

輸出結果:

採用鏈式結構,原理一致。

聯繫我們

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