循环队列
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int DataType;
typedef struct {
DataType *base;
int front;
int rear;
int MAXQSIZE;
}SqQueue,*PSqQueue;
SqQueue *q;
PSqQueue createEmptyQ_seq(int m){
PSqQueue Q = (PSqQueue)malloc(sizeof(SqQueue));
if(Q){
Q->base = (DataType*)malloc(sizeof(DataType)*m);
if(Q->base){
Q->front = Q->rear =0;
Q->MAXQSIZE=m;
return Q;
}
else free(Q);
}
return 0;
}
int isEmptyQueue(PSqQueue Q){
if(Q->front==Q->rear)return 1;
else return 0;
}
int enQueue(PSqQueue Q,DataType e){
if((Q->rear+1)%Q->MAXQSIZE==Q->front){
printf("队列已满,无法入队");
return 0;
}
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%Q->MAXQSIZE;
return 1;
}
void deQueue(PSqQueue Q){
if(Q->front==Q->rear){
printf("队列为空,不能出队\n");
exit(0);
}
Q->front=(Q->front+1)%Q->MAXQSIZE;
}
DataType headQueue(PSqQueue Q){
if(Q->front==Q->rear)printf("队列为空\n");
exit(0);
return (Q->base[Q->front]);
}
int main()
{
}
链式队列
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int DataType;
typedef struct Qnode QNode;
typedef struct Qnode{
DataType info;
QNode *link;
}*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue,*PLinkQueue;
LinkQueue q;
LinkQueue initQueue(){
LinkQueue Q;
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q.front)exit(0);
Q.front->link=NULL;
return Q;
}
int enQueue(DataType x){
QueuePtr qnode = (QueuePtr)malloc(sizeof(QNode));
if(!qnode)return 0;
qnode->info=x;
qnode->link=NULL;
q.rear->link = qnode;
q.rear=qnode;
return 1;
}
int deQueue(PLinkQueue q,DataType *e){
if(q->front==q->rear)return 0;
QueuePtr p=q->front->link;
*e = p->info;
q->front->link=p->link;
if(q->rear==p)q->rear=q->front;
free(p);
return 1;
}
int main()
{
}