其实感觉这玩意真的好麻烦。。但是自己实现一遍还是很有踏实感的。。
SeQueue:
- /*=============================================================================
- #
- # Author: liangshu - cbam
- #
- # QQ : 756029571
- #
- # School : 哈尔滨理工大学
- #
- # Last modified: 2015-10-26 14:27
- #
- # Filename: 循环队列(顺序)二 - 副本 (3).cpp
- #
- # Description:
- # The people who are crazy enough to think they can change the world, are the ones who do !
- =============================================================================*/
- #
- using namespace std;
- typedef int Queue_entry;
- const int maxqueue = 6;
- enum Error_code{overflow, underflow,success};
- class Queue{
- public:
- Queue();
- bool Empty()const;
- void Print_queue()const;
- Error_code serve();
- Error_code append(const Queue_entry &item);
- Error_code retrieve(Queue_entry &item)const;
- protected:
- int num;
- int front_, rear_;
- Queue_entry Entry[maxqueue];
- };
- class Extended_queue: public Queue{
- public:
- Extended_queue(const Queue &tp):Queue(tp){}
- bool Full()const;
- int Size()const;
- void Clear();
- Error_code serve_and_retrieve(Queue_entry &item);
- };
- Queue::Queue(){
- num = 0;
- rear_ = maxqueue - 1;
- front_ = 0;
- }
- bool Queue::Empty()const{
- return num == 0;
- }
- Error_code Queue::append(const Queue_entry &item){
- if(num >= maxqueue){
- return overflow;
- }
- num++;
- rear_ = (rear_ + 1) == maxqueue ? 0 : (rear_ + 1);
- Entry[rear_] = item;
- return success;
- }
- Error_code Queue::serve(){
- if(num <= 0){
- return underflow;
- }
- num--;
- front_ = ((front_ + 1) == maxqueue ? 0 : front_ + 1);
- return success;
- }
- void Queue::Print_queue()const{
- cout<<"front -> ";
- for(int i = 0; i < num; i++){
- cout<<Entry[(front_ + i) % maxqueue]<<" -> ";
- }
- cout<<"rear"<<endl;
- }
- Error_code Queue::retrieve(Queue_entry &item)const{
- if(num <= 0){
- return underflow;
- }
- item = Entry[front_];
- return success;
- }
- bool Extended_queue::Full()const{
- if(num == maxqueue){
- return true;
- }
- return false;
- }
- int Extended_queue::Size()const{
- return num;
- }
- void Extended_queue::Clear(){
- this -> num = 0;
- this -> front_ = 0;
- this -> rear_ = maxqueue - 1;
- }
- Error_code Extended_queue::serve_and_retrieve(Queue_entry &item){
- if(Empty()){
- return underflow;
- }
- item = Entry[front_];
- this -> serve();
- return success;
- }
Test.cpp:
- #include<iostream>
- #include"SeQueue.h"
- int main()
- {
- Queue queue_;
- for(int i = 1; i <= maxqueue; i++){
- queue_.append(i);
- }
- queue_.Print_queue();
- int x;queue_.retrieve(x);
- cout<<"t ="<<x<<endl;
- queue_.serve();
- queue_.retrieve(x);
- cout<<x<<endl;
- queue_.Print_queue();
- queue_.append(7);
- queue_.append(8);
- queue_.Print_queue();
- cout<<"继承:\n"<<endl;
- Extended_queue queue_2(queue_);
- queue_2.Print_queue();
- queue_2.retrieve(x);
- cout<<x<<endl;
- queue_2.serve_and_retrieve(x);
- queue_2.Print_queue();
- queue_2.Clear();
- queue_2.Print_queue();
- cout<<queue_2.retrieve(x)<<endl;
- return 0;
- }