1.队列
队列先进先出
1.1 链队列--链式存储
1.1.1 结构体
typedef int DataType;
typedef struct QNode{
DataType info;
struct QNode *link;
}Node,*PNode;
typedef struct{
PNode front,rear;
}LinkQueue,*PLinkQueue;
1.1.2 操作
· 构造一个空队列
PLinkQueue createEmptyQueue_link()
{
PLinkQueue plqu;
plqu=(PLinkQueue)malloc(sizeof(LinkQueue));
if(!plqu)
printf("Out of Space!\n");
else{
plqu->front=plqu->rear=NULL;
}
return plqu;
}
· 是否为空队列
int isEmptyQueue_link(PLinkQueue plqu)
{
return (plqu->front==NULL);
}
· 进入队列
void enQueue_link(PLinkQueue plqu,DataType x)
{
PNode p;
if(!(p=(PNode)malloc(sizeof(Node))))
printf("out of space!\n");
else{
p->info=x; p->link=NULL;
if(plqu->front==NULL){
plqu->front=p;
plqu->rear=p;
}
else{
plqu->rear->link=p;
plqu->rear=p;
}
}
}
· 出队
void deQueue_link(PLinkQueue plqu)
{
PNode p;
if(plqu->front==NULL)
printf("Empty queue!\n");
else{
p=plqu->front;
plqu->front=plqu->front->link;
free(p);
}
}
1.2 循环队列--顺序存储
队列空时,front==rear;队列满时,front==rear+1。
1.2.1 结构体
#define MAXNUM 100
typedef int DataType;
typedef struct SeqQueue{
DataType q[MAXNUM];
int front,rear;
}SeqQueue,*PSeqQueue;
1.2.2 操作
· 创建空队列
PSeqQueue creatEmptyQueue_seq()
{
PSeqQueue paqu;
paqu=(PSeqQueue)malloc(sizeof(SeqQueue));
if(paqu==NULL)
printf("Out of Space!\n");
else{
paqu->front=0;
paqu->rear=0;
}
return paqu;
}
· 是否为空
int isEmptyQueue_seq(PSeqQueue papu)
{
return (papu->front==papu->rear);
}
· 是否为满队列
int isFullQueue_seq(PSeqQueue papu)
{
return ((papu->rear+1)%MAXNUM==papu->front);
}
· 入队
void enQueue_seq(PSeqQueue papu,DataType x)
{
if(isFullQueue_seq(papu))
printf("is full!\n");
else{
papu->q[papu->rear]=x;
papu->rear=(papu->rear+1)%MAXNUM;
}
}
· 出队
void deQueue_seq(PSeqQueue papu)
{
if(isEmptyQueue_seq(papu))
printf("is empty!\n");
else{
papu->front=(papu->front+1)%MAXNUM;
}
}