很明显 这个只要实现队列一切就简单了 其实c++有quene类 这里我们自己实现它
剩下的自己来写就好了 很简单的
首先一个链表的
#include <iostream>
using namespace std;
//链表
typedef struct QDode
{
int n;
struct QDode *next;
}*pqdode,qdode;
//队列
typedef struct MyQueue
{
pqdode front;
pqdode rear;
}*pmyqueue,myqueue;
bool Init_queue(pmyqueue qu);//初始化队列
bool Is_empty(pmyqueue qu);//判断队列是否为空
void Put_queue(pmyqueue qu,int val);//入队
int Out_queue(pmyqueue qu);//出队
int Travel_queue(pmyqueue qu);//遍历队列
void Destory_queue(pmyqueue qu);//销毁队列
//主函数
int main()
{
myqueue queue={NULL,NULL};
Init_queue(&queue);//初始化
Put_queue(&queue,5);//入队
if (!Is_empty(&queue))
{
cout<<"队列不为空"<<endl;
}
Put_queue(&queue,6);
Put_queue(&queue,7);
Put_queue(&queue,8);
Put_queue(&queue,9);
Travel_queue(&queue);//遍历
int val=Out_queue(&queue);
cout<<endl<<endl<<val<<endl<<endl;
Travel_queue(&queue);//遍历
int vall=Out_queue(&queue);
cout<<endl<<endl<<vall<<endl<<endl;
Travel_queue(&queue);//遍历
Destory_queue(&queue);//销毁
cout<<endl;
return 0;
}
bool Init_queue(pmyqueue qu)
{
qu->front = new qdode;
if (qu->front==NULL)
{
cout<<"动态分配内存失败!"<<endl;
return false;
}
else
{
qu->rear=qu->front;
qu->front->next=NULL;
return true;
}
}
void Destory_queue(pmyqueue qu)
{
pqdode p=qu->front,q=NULL;
while (p)
{
q = p->next;
delete p;
p = q;
}
p = NULL;
}
void Put_queue(pmyqueue qu,int val)
{
qu->rear->n = val;
pqdode q=qu->rear;
pqdode p = new qdode;
p->next = NULL;
qu->rear = p;
q->next = p;
}
bool Is_empty(pmyqueue qu)
{
if (qu->front!=qu->rear)
{
return false;
}
else
{
return true;
}
}
int Travel_queue(pmyqueue qu)
{
int count=0;
if (Is_empty(qu))
{
cout<<"该队列为空!"<<endl;
return 0;
}
else
{
pqdode p=qu->front,q=NULL;
while (p!=qu->rear)
{
count++;
cout<<p->n<<" ";
if (!(count%5))
{
cout<<endl;
}
p = p->next;
}
return count;
}
}
int Out_queue(pmyqueue qu)
{
if (Is_empty(qu))
{
cout<<"该队列为空!"<<endl;
return -1;
}
else
{
int val=qu->front->n;
pqdode p = qu->front->next;
delete qu->front;
qu->front = p;
return val;
}
}
然后一个数组实现的
#include <iostream>
using namespace std;
class QUEUE //队列类
{
private: //私有成员
int *pBase;
int front,rear;
int count;
public: //公有成员
bool Is_empty();//判断是否为空
bool Is_full();//判断是否满
void enter_queue(int n);//入队
int out_queue();//出队
void travel_queue();//遍历队
QUEUE (int number = 100)
{
front = rear = 0;
pBase = new int[number+1];
count = number + 1;
}
~QUEUE()
{
delete [] pBase;
}
};
int main()
{
QUEUE queue(5);
queue.enter_queue(1);
queue.enter_queue(2);
queue.enter_queue(3);
queue.enter_queue(4);
queue.enter_queue(5);
queue.enter_queue(6);
queue.travel_queue();
queue.out_queue();
queue.travel_queue();
queue.out_queue();
queue.travel_queue();
queue.out_queue();
queue.travel_queue();
queue.out_queue();
queue.travel_queue();
queue.out_queue();
queue.travel_queue();
queue.out_queue();
if (queue.Is_full())
{
cout<<"wangbadan"<<endl;
}
int n = queue.out_queue();
cout<<n<<endl;
queue.travel_queue();
int n1 = queue.out_queue();
cout<<n1<<endl;
queue.travel_queue();
return 0;
}
bool QUEUE::Is_empty()//判断是否满
{
if (front == rear)
{
return true;
}
else
{
return false;
}
}
bool QUEUE::Is_full()//判断是否空
{
if ((rear + 1) % count == front)
{
return true;
}
else
{
return false;
}
}
void QUEUE::enter_queue(int n)//入队
{
if (Is_full())
{
cout<<"队列已满!"<<endl;
}
else
{
pBase[rear]=n;
rear = (rear + 1) % count;
}
return;
}
int QUEUE::out_queue()//出队
{
int n = pBase[front];
if (Is_empty())
{
cout<<"该队列已空!"<<endl;
return false;
}
else
{
front = (front + 1) % count;
return n;
}
}
void QUEUE::travel_queue()//遍历
{
int j=0;
for (int i=front;i % count != rear;i++)
{
j++;
cout<<pBase[i%count]<<" ";
if (j==5)
{
cout<<endl;
j=0;
}
}
if (j)
{
cout<<endl;
}
return;
}
追问#include
int main()
{
char key;
scanf("%c",&key);
while(key=='I')
{
printf("bababa:");
scanf("%c",&key);
}
return 0;
}
为什么这个,第二个scanf导致while循环跳出呢
不是应该让你继续输入一个字符么!?
为什么会直接跳出来了,到第一个scanf输入I时!!
追答因为 第二个scanf是给key赋值啊
而while循环是根据key的值来判断是否继续的
追问在第二个scanf输入之前,就已经跳出了循环
追答那就是因为第一个key的值没有被赋值为I了呗