【資料結構】順序隊列的實現(c++)

來源:互聯網
上載者:User

標籤:資料結構   c++   順序隊列   

標頭檔:


#pragma once#include <iostream>#include <assert.h>using namespace std;template<class Type>class SeqQueue{public:SeqQueue(size_t sz = INIT_SZ);~SeqQueue();public:bool empty()const;bool full()const;void show()const;bool push(const Type &x);bool pop();void gettop(Type &x);int length()const;void clear();void destory();void quit_system(Type &x);private:enum{ INIT_SZ = 8 };Type *base;int capacity;int head;int tail;};template<class Type>SeqQueue<Type>::SeqQueue(size_t sz = INIT_SZ){capacity = sz > INIT_SZ ? sz : INIT_SZ;base = new Type[capacity];assert(base != NULL);head = 0;tail = 0;}template<class Type>SeqQueue<Type>::~SeqQueue(){destory();}// 判斷隊列是否滿了,順序隊列呈現虛滿的狀態template<class Type>bool SeqQueue<Type>::full()const{return (tail >= capacity);}// 判斷隊列是否為空白template<class Type>bool SeqQueue<Type>::empty()const{return (tail == 0);}// 顯示template<class Type>void SeqQueue<Type>::show()const{if (tail == 0){cout << "the queue is empty!" << endl;return;}for (int i = tail - 1; i >= head; --i){cout << base[i] << endl;}}// 入隊template<class Type>bool SeqQueue<Type>::push(const Type &x){if (full()){cout << "the queue is full,can not enter!" << endl;return false;}else{base[tail] = x;tail++;return true;}}// 出隊template<class Type>bool SeqQueue<Type>::pop(){if (empty()){cout << "the queue is empty,can not pop!" << endl;return false;}else{head++;return true;}}// 獲得隊頭元素template<class Type>void SeqQueue<Type>::gettop(Type &x){x = base[head];}// 求隊列長度template<class Type>int SeqQueue<Type>::length()const{return (tail - head);}// 清空隊列template<class Type>void SeqQueue<Type>::clear(){head = tail = 0;}// 摧毀隊列template<class Type>void SeqQueue<Type>::destory(){delete []base;base = NULL;capacity = head = tail = 0;}// 摧毀隊列template<class Type>void SeqQueue<Type>::quit_system(Type &x){x = 0;}



主函數:


#include "SeqQueue.h"int main(){SeqQueue<int> myqueue;int input = 1;int value;while (input){cout << "****************************************************" << endl;cout << "*       [1] show                 [2] push          *" << endl;cout << "*       [3] pop                  [4] gettop        *" << endl;cout << "*       [5] length               [6] clear         *" << endl;cout << "*       [7] destory              [8] quit_syntem   *" << endl;cout << "****************************************************" << endl;cout << "please choose:";cin >> input;switch (input){case 1:myqueue.show();break;case 2:cout << "please enter the number:";while (cin >> value, value != -1){myqueue.push(value);}break;case 3:myqueue.pop();break;case 4:myqueue.gettop(value);cout << value << endl;break;case 5:cout << myqueue.length() << endl;break;case 6:myqueue.clear();break;case 7:myqueue.destory();break;case 8:myqueue.quit_system(input);break;default:break;}}return 0;}



清空:




獲得隊頭元素:




隊列長度:




出隊:




入隊:




退出系統:



【資料結構】順序隊列的實現(c++)

聯繫我們

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