SeqQueue:
- /*=============================================================================
- #
- # Author: liangshu - cbam
- #
- # QQ : 756029571
- #
- # School : 哈尔滨理工大学
- #
- # Last modified: 2015-10-27 17:25
- #
- # Filename: 链式队列 - 副本.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 Node_entry;
- typedef int Queue_entry;
- enum Error_code{overflow, success, underflow};
- struct Node{
- Node_entry Entry;
- Node *next;
- Node();
- Node(const Node_entry &item, Node *add_on = NULL):Entry(item),next(add_on){}
- };
- Node::Node(){
- next = NULL;
- }
- class Queue{
- public:
- Queue();
- ~Queue();
- bool Empty()const;
- Error_code append(const Queue_entry &item);
- Error_code serve();
- Error_code retrieve(Queue_entry &item)const;
- Queue(const Queue &original);
- void Print_queue()const;
- void operator = (const Queue &original);
- protected:
- Node *front_, *rear_;
- };
- class Extented_queue: public Queue{
- public:
- Extented_queue(){};
- Extented_queue(const Queue &original):Queue(original){};
- int Size()const;
- void Clear();
- Error_code serve_and_retrieve(Queue_entry &item);
- };
- Queue::Queue(){
- front_ = rear_ = NULL;
- }
- bool Queue::Empty()const{
- if(front_ == NULL){
- return true;
- }
- return false;
- }
- Error_code Queue::serve(){
- if(front_ == NULL){
- return underflow;
- }
- Node *old_front = front_;
- front_ = front_ -> next;
- if(front_ == NULL){
- front_ = rear_ = NULL;
- }
- delete old_front;
- return success;
- }
- Error_code Queue::retrieve(Queue_entry &item)const{
- if(front_ == NULL){
- return underflow;
- }
- item = front_ -> Entry;
- return success;
- }
- Error_code Queue::append(const Queue_entry &item){
- Node *new_rear = new Node(item);
- if(new_rear == NULL){
- return overflow;
- }
- if(rear_ == NULL){
- front_ = rear_ = new_rear;
- }
- else{
- rear_ -> next = new_rear;
- rear_ = new_rear;
- }
- return success;
- }
- void Queue::operator = (const Queue &original){
- Node *new_front, *new_rear, *new_copy, *original_node = original.front_;
- if(original_node == NULL){
- new_front = new_rear = NULL;
- }
- else{
- new_copy = new_front = new Node(original_node -> Entry);
- while(original_node -> next != NULL){
- original_node = original_node -> next;
- new_copy -> next = new Node(original_node -> Entry);
- new_copy = new_copy -> next;
- }
- new_rear = new_copy;
- }
- while(front_ != NULL){
- serve();
- }
- front_ = new_front;
- rear_ = new_rear;
- }
- Queue::Queue(const Queue &original){
- Node *new_copy, *original_node = original.front_;
- if(original.front_ == NULL){
- front_ = rear_ = NULL;
- }
- else{
- front_ = new_copy = new Node(original_node -> Entry);
- rear_ = new_copy;
- while(original_node -> next != NULL){
- original_node = original_node -> next;
- new_copy -> next = new Node(original_node -> Entry);
- new_copy = new_copy -> next;
- }
- rear_ = new_copy;
- }
- }
- void Queue::Print_queue()const{
- Node *window = front_;
- cout<<"front <- ";
- while(window != NULL){
- cout<<window -> Entry<<" <- ";
- window = window -> next;
- }
- cout<<"rear"<<endl;
- }
- int Extented_queue::Size()const{
- Node * window = front_;
- int Count = 0;
- while(window != NULL){
- Count++;
- window = window -> next;
- }
- return Count;
- }
- void Extented_queue::Clear(){
- while(!Empty()){
- serve();
- }
- }
- Error_code Extented_queue::serve_and_retrieve(Queue_entry &item){
- if(front_ == NULL){
- return underflow;
- }
- Node *old_front = front_;
- front_ = front_ -> next;
- if(front_ == NULL){
- front_ = rear_ = NULL;
- }
- item = old_front -> Entry;
- delete old_front;
- return success;
- }
- Queue::~Queue(){
- while(front_ != NULL){
- serve();
- }
- }
Test.cpp:
- #include<iostream>
- #include"a.h"
- using namespace std;
- int main()
- {
- Queue queue_1, queue_2, queue_3;
- for(int i = 1; i <=5; i++){
- queue_1.append(i);
- }
- int x;
- queue_1.Print_queue();
- queue_1.serve();
- queue_1.Print_queue();
- queue_1.retrieve(x);
- cout<<"x ="<<x<<endl;
- queue_2 = queue_1;cout<<"dsfg"<<endl;
- queue_2.Print_queue();
- queue_3 = Queue(queue_2);
- queue_3.Print_queue();
- queue_3.retrieve(x);
- cout<<x<<endl;
- Extented_queue queue_4;
- //Extented_queue测试
- queue_4 = Extented_queue(queue_1);
- queue_4.Print_queue();
- cout<<queue_4.Size()<<endl;
- queue_4.serve_and_retrieve(x);
- queue_4.Print_queue();
- cout<<x<<endl;
- return 0;
- }