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; } 【过程记录】 实验截图: 【结果分析】 1.实验中我以课本后面的练习题为例,实现并验证了顺序队列的更种功能。 2.队列与栈一样是在类中以数组存储数据,但由于队列先进先出的特点在实现存储形式上与栈有一定的不同。因为如果与栈一样对数据操作,队列会无限向后扩大,而前面取出过数据的地方将不会再被利用,十分浪费,也很容易溢出。所以我们采用循环数组来存储,这样合理利用了资源。但在类的实现要要极为时刻考虑周全rear和front的各种可能,要判断是不是循环到了前面,count在此时的功能也极为突出。 3.书中的程序看似简单,但实际判断各种输出情况的时候却极难考虑周全。我首先做出了简易的流程图,然后才写函数,具体分析及思路可见我源码的注释。另外本题还有另外一种实现思路:即将左右输入分别存放在两个队列中,边取去边比较,那样在逻辑上容易理解一些。但鉴于题目的要求,我还是用边从左边队列中取出边比较右边输入的方法。 4.我在实验中遇到的问题: (1)自己一开始在循环判断用的是cin.get()=='\n'即遇到回车就停止输入,但却无法如料想中结束循环……最终采用cin>>a && waiting(用以标志‘:’的输入)来作为循环终止的条件,这样虽然可以运行,但用户必须输入Ctrl+‘Z’以结束输入。看来自己对输入流的理解与掌握还没有到位。 (2)另外在检验的时候,我发现输入‘:’之前是否输入回车情况是有区别的。如 输入“sam:sam”(无空格),结果为“R” 输入“sam : sam”(有空格),结构为“S” 显然后者是我希望得到的结果,我分析可能是前面情况‘:’被列入了right的判断,从而使结构右边比左边长。还没有想到如何改进。