顺序队列
对顺序队列的定义及一些基本操作
#include "stdio.h"
#include "stdlib.h"
#define ElemType int
#define MaxSize 10
typedef struct{
ElemType data[MaxSize];
int front,rear;
int tag;
}SqQueue;
void InitQueue(SqQueue &Q)
{
Q.front=Q.rear=0;
}
bool Empty(SqQueue &Q)
{
if(Q.front==Q.rear && Q.tag==0)
return true;
else
return false;
}
bool Full(SqQueue &Q)
{
if(Q.rear==Q.front && Q.tag==1)
return true;
else
return false;
}
void EnQueue(SqQueue &Q,ElemType e)
{
if(Full(Q))
printf("queue is full\n");
else{
Q.data[Q.rear]=e;
Q.rear=(Q.rear+1)%MaxSize;
Q.tag=1;
}
}
void DeQueue(SqQueue &Q,ElemType &e)
{
if(Empty(Q))
printf("queue is empty\n");
else{
e=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
Q.tag=0;
}
}
void PrintQueue(SqQueue &Q)
{
if(Full(Q))
printf("queue is empty\n");
else{
for(int i=Q.front;i!=Q.rear;i=(i+1)%MaxSize)
{
printf("%d ",Q.data[i]);
}
printf("\n");
}
}
以下是参照《2022年数据结构考研复习指导》的课后习题所著
//习题3.4---渡船管理
void Manger(SqQueue &q,SqQueue &q1,SqQueue &q2)
{ //q为过江渡船队列,q1为客车队列,q2为货车队列
ElemType x;
int i=0,j=0;
//i为上渡船的客车数,j为上渡船的总车数
while(j<10){
if(!Empty(q1) && i<4){
DeQueue(q1,x);
EnQueue(q,x);
i++;
j++;
}
else if(i==4 && !Empty(q2)){
DeQueue(q2,x);
EnQueue(q,x);
j++;
i=0;
}
else{
while(j<10 && i<4 && !Empty(q2)){
DeQueue(q2,x);
EnQueue(q,x);
i++;
j++;
}
i=0;
}
}
}
顺序队列和链栈都没怎么写过代码,所以就比较少,见谅。