之前看了下队列的原理,信心满满马上写了个循环队列,与例程一对比才发现我这写的确实很垃圾。
我记录下例程对待问题的思想作个对比
1.我的代码中出现大量for循环,需要思考能否简化
2.出入队列过于冗杂,如下
// function with queue
/*
总结下类中的结构体 要用指针
*/
#include<iostream>
using namespace std;
enum {maxsize = 100};
struct queue_s{
int queue_list[maxsize];
int rare, front;
} Q1 ={{0}, 0, 0};
class queue{
public:
queue(queue_s *Q1)
{
Q = Q1;
}
void in_queue(int mem)
{
if(Q->rare == Q->front && Q->queue_list[Q->rare] == -1)
{
Q->queue_list[(Q->rare)] = mem;
//cout<<"1";
}
else if(Q->front - Q->rare == 1||Q->rare - Q->front==maxsize - 1)
{
//cout<<"满了!!";
}
else if(Q->rare == maxsize - 1)
{
Q->rare = 0;
Q->queue_list[Q->rare] = mem;
//cout<<"4";
}
else if(Q->rare == Q->front)
{
Q->queue_list[(Q->rare+1)] = mem;
Q->rare += 1;
//cout<<"2";
}
else if(Q->rare < Q->front - 1)
{
Q->queue_list[Q->rare+1] = mem;
Q->rare += 1;
//cout<<"3";
}
else
{
Q->queue_list[(Q->rare+1)] = mem;
Q->rare += 1;
//cout<<"5";
}
}
void out_queue()
{
if(Q->front == Q->rare)
{
cout<<"is empty\n";
Q->queue_list[Q->rare] = -1;
}
else if(Q->front!=maxsize-1)
Q->front += 1;
else
Q->front = 0;
}
void display()
{
int i = Q->front;
if(i>Q->rare)
{
for(;i<=maxsize-1;i++) cout<<Q->queue_list[i]<<" ";
for(i= 0;i<=Q->rare;i++) cout<<Q->queue_list[i]<<" ";
}
else{
for(;(i!=Q->rare+1)&&((Q->queue_list[Q->rare] )!= -1); i++)
{
if(i == maxsize)
i = 0;
cout<<Q->queue_list[i]<<" ";
}}
cout<<"\n";
}
int theCount()
{
return Q->rare;
}
int theCount1()
{
return Q->front;
}
private:
queue_s *Q;
};
int main()
{
queue lin1(&Q1);
int x=0,y;
while(1)
{
if(x==1)
{
cin>>y;
lin1.in_queue(y);
}
if(x==2)
lin1.out_queue();
else if(x==3)
lin1.display();
cout
<<"\a当前队列在 "
<< lin1.theCount()
<<"区 "
//<<lin1.theCount1()
<<"\n"
<<"请输入以下数字:\n"
<<"1:入队\n"
<<"2:出队\n"
<<"3:打印\n";
cin>>x;
}
}
例程的入队算法
void InQueue(Queue * Q, DataType x)
{
if(Q->rear+1)%MaxSize == Q->front)
{
printf("队列已满");
exit(1);
}
Q->rear = (Q->rear+1)%MaxSize;
Q->data[Q->rear] = x;
}