//库函数头文件包含
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
//函数状态码定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int QElemType;
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct Queue
{
QueuePtr front;
QueuePtr rear;
}SqQueue;
Status InitQueue(SqQueue &Q)
{
Q.front = (QNode *)malloc(sizeof(QNode));
if(!Q.front) exit(OVERFLOW);
Q.front->next = NULL;
Q.rear = Q.front;
return OK;
}
Status DestroyQueue(SqQueue &Q)
{
QNode *p = Q.front, *postp;
while(p)
{
postp = p->next;
free(p);
p = postp;
}
Q.front = Q.rear = NULL;
return OK;
}
Status ClearQueue(SqQueue &Q)
{
QNode *p = Q.front->next;
while(p)
{
QNode *temp = p;
p = p->next;
free(p);
}
Q.rear = Q.front;
Q.rear->next = NULL;
}
Status QueueEmpty(SqQueue Q)
{
if(Q.front == Q.rear)
return TRUE;
return FALSE;
}
int QueueLength(SqQueue Q)
{
int len = 0;
QNode *temp = Q.front->next;
while(temp)
{
++len;
temp = temp->next;
}
return len;
}
Status GetHead(SqQueue Q, QElemType &e)
{
if(Q.front = Q.rear)
return ERROR;
e = Q.front->next->data;
return OK;
}
Status EnQueue(SqQueue &Q, QElemType e)
{
QueuePtr p;
p = (QNode *)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p->data = e; p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
Status DeQueue(SqQueue &Q, QElemType &e)
{
if(Q.front == Q.rear)
return ERROR;
QueuePtr temp = Q.front->next;
e = temp->data;
Q.front->next = temp->next;
if(Q.rear == temp) Q.rear = Q.front;
free(temp);
return OK;
}
//思路:创建两个队列作为A窗口和B窗口,奇数去A,偶数去B,当A输出两个元素时,B输出一个元素
//注意:当一个队列为空而另一个队列还有元素时,直接将其全部输出
int main()
{
SqQueue A;//创建奇队列
SqQueue B;//创建偶队列
int n,m;
QElemType e,q;
InitQueue(A);
InitQueue(B);
scanf("%d", &n);
for(int i = 0; i < n; ++i)
{
scanf("%d", &e);
if(e % 2 == 1)
{
EnQueue(A, e);
}
else
{
EnQueue(B, e);
}
}
m=0;//判断是否输出空格
while(!QueueEmpty(A)&&!QueueEmpty(B))
{
//奇队列每次循环输出两次
if(m==0)
{
DeQueue(A,q);
printf("%d",q);
m++;
printf(" ");
DeQueue(A,q);
printf("%d",q);
}
else
{
printf(" ");
DeQueue(A,q);
printf("%d",q);
m++;
printf(" ");
DeQueue(A,q);
printf("%d",q);
}
//偶队列每次循环输出一次
if(!QueueEmpty(B))
{
printf(" ");
DeQueue(B,q);
printf("%d",q);
}
}
while(!QueueEmpty(A)&&QueueEmpty(B))
{
if(m==0)//全为奇数
{
DeQueue(A,q);
printf("%d",q);
m++;
}
else
{
printf(" ");
DeQueue(A,q);
printf("%d",q);
m++;
}
}
while(QueueEmpty(A)&&!QueueEmpty(B))
{
if(m==0)//全为偶数
{
DeQueue(B,q);
printf("%d",q);
m++;
}
else
{
printf(" ");
DeQueue(B,q);
printf("%d",q);
m++;
}
}
printf("\n");
return 0;
}
PTA 7-1 银行业务队列简单模拟
最新推荐文章于 2023-04-16 21:07:04 发布