Error_code serve_and_retrieve(Queue_entry &item);
};
#endif
#ifndef QUEUE_H
#define QUEUE_H
const int maxqueue=10;
enum Error_code {success,overflow,underflow};
typedef char Queue_entry ;
class Queue{
public:
Queue();
bool empty() const;
Error_code append(const Queue_entry &item);
Error_code serve();
Error_code retrieve(Queue_entry &item)const;
protected:
int count;
int front,rear;
Queue_entry entry[maxqueue];
};
class Extended_queue:public Queue{
public:
bool full()const;
int size()const;
void clear();
Error_code serve_and_retrieve(Queue_entry &item);
};
#endif
queue.cpp
[cpp] view plaincopyprint
#include"queue.h"
Queue::Queue()
{
count=0;
rear=maxqueue-1;
front=0;
}
bool Queue::empty() const
{
return count==0;
}
Error_code Queue::append(const Queue_entry &item)
{
if(count>=maxqueue)return overflow;
count++;
rear=((rear+1)==maxqueue) 0:(rear+1);
entry[rear]=item;
return success;
}
Error_code Queue::serve()
{
if(count<=0)return underflow;
count--;
front=((front+1)==maxqueue) 0:(front+1);
return success;
}
Error_code Queue::retrieve(Queue_entry &item) const
{
if(count<=0)return underflow;
item=entry[front];
return success;
}
bool Extended_queue::full() const{
return count==maxqueue;
}
int Extended_queue::size()const{
return count;
}
void Extended_queue::clear(){
count=0;
rear=front;
}
Error_code Extended_queue::serve_and_retrieve(Queue_entry &item){
if(count==0)return underflow;
count--;
item=entry[front];
front=((front+1)==maxqueue) 0:(front+1);
return success;
}
#include"queue.h"
Queue::Queue()
{
count=0;
rear=maxqueue-1;
front=0;
}
bool Queue::empty() const
{
return count==0;
}
Error_code Queue::append(const Queue_entry &item)
{
if(count>=maxqueue)return overflow;
count++;
rear=((rear+1)==maxqueue) 0:(rear+1);
entry[rear]=item;
return success;
}
Error_code Queue::serve()
{
if(count<=0)return underflow;
count--;
front=((front+1)==maxqueue) 0:(front+1);
return success;
}
Error_code Queue::retrieve(Queue_entry &item) const
{
if(count<=0)return underflow;
item=entry[front];
return success;
}
bool Extended_queue::full() const{
return count==maxqueue;
}
int Extended_queue::size()const{
return count;
}
void Extended_queue::clear(){
count=0;
rear=front;
}
Error_code Extended_queue::serve_and_retrieve(Queue_entry &item){
if(count==0)return underflow;
count--;
item=entry[front];
front=((front+1)==maxqueue) 0:(front+1);
return success;
}
comparequeue.cpp
[cpp] view plaincopyprint
#include "queue.h"
#include
#include
using namespace std;
void Introduction();
void Compare();
int main(){
Introduction();
Compare();
return 0;
}
//show the introduction of the program
void Introduction(){
cout<<"Hi! This program is compare two parts of characters."< <<"First you should type in a line of characters which is supposed to consist of two parts "
<<"separated by a colon ':' ."< <<"And then enter to quit put in"< <<"Then I will show you a single character as follows :"< <<"[N] No colon on the line"< <<"[L] The left part (before the colon) is longer than the right"< <<"[R] The right part (after the colon) is longer than the left"< <<"[D] The left and the right parts have the same length but different"< <<"[S] The left and the right parts are exactly the same"< <<"And enter [Ctrl+'Z'] to stop input"< <<"So , just try it!"< return;
}
void Compare(){
Extended_queue left_queue;
char left_char;
bool waiting=true;
while(cin>>left_char && waiting){
if(left_char==':'){
waiting=false; //if ':' is entered, quit the left input
break;
}
else if(left_queue.full())
cout<<"Queue is full!"< else
left_queue.append(left_char);
//if the input is not ':' and there is space in the queue
//append the charcter to the queue
}
char right_char;
bool same=true;
while(!waiting && cin>>right_char){ //if ':' is input before
//now input the righter charachters
if(left_queue.empty()){
cout<<"R"< //and the user is still inputing, right must longer than left
//print [R]
return;
}
else{
left_queue.serve_and_retrieve(left_char);
if(left_char!=right_char)
same=false; //if the character input now is different from
//the one put into left before, set the bool same to 'false'
}
}
if(waiting){
cout<<"N"< //print [N]
return ;
}
if(!left_queue.empty()){
cout<<"L"< //left must longer than right
//print [L]
return ;
}
if(left_queue.empty() && same){
cout<<"S"< //left and right have the exactly same characters
//print [S]
return;
}
return;
}
#include "queue.h"
#include
#include
using namespace std;
void Introduction();
void Compare();
int main(){
Introduction();
Compare();
return 0;
}
//show the introduction of the program
void Introduction(){
cout<<"Hi! This program is compare two parts of characters."< <<"First you should type in a line of characters which is supposed to consist of two parts "
<<"separated by a colon ':' ."< <<"And then enter to quit put in"< <<"Then I will show you a single character as follows :"< <<"[N] No colon on the line"< <<"[L] The left part (before the colon) is longer than the right"< <<"[R] The right part (after the colon) is longer than the left"< <<"[D] The left and the right parts have the same length but different"< <<"[S] The left and the right parts are exactly the same"< <<"And enter [Ctrl+'Z'] to stop input"< <<"So , just try it!"< return;
}