循环队列
#include<stdio.h>
#include<stdlib.h>
//循环队
#define maxsize 10
typedef struct Squeue
{
int data[maxsize];
int front;
int rear;
}Squeue;
//初始化循环队列
void init(Squeue* qu)
{
qu->front = 0;
qu->rear = 0;
}
//判断队列是否为空
int isQueueEmpty(Squeue* qu)
{
if (qu->front == qu->rear)
return 1;
else
return 0;
}
//进队函数
int push(Squeue* qu,int x)
{
if ((qu->rear + 1) % maxsize == qu->front)
return 0; //队满,进队失败
qu->rear = (qu->rear + 1) % maxsize;
qu->data[qu->rear] = x;
return 1;
}
//出队函数
int pop(Squeue* qu, int* x)
{
if (qu->front == qu->rear)
return 0;// 队空,出队失败
qu->front = (qu->front + 1) % maxsize;
(*x) = qu->data[qu->front];
return 1;
}
int main()
{
Squeue q;
init(&q);
push(&q,1);
push(&q,2);
push(&q, 3);
int x;
while (!isQueueEmpty(&q))
{
pop(&q,&x);
printf("%d", x);
}
printf("\n");
return 0;
}
链队
#include<stdio.h>
#include<stdlib.h>
typedef struct Qnode
{
int data;
struct Qnode* next;
}Qnode;
typedef struct LiQueue
{
struct Qnode* front;
struct Qnode* rear;
}LiQueue;
//初始化链队
void init(LiQueue** Q)
{
(*Q) = (LiQueue*)malloc(sizeof(LiQueue));
(*Q)->front = NULL;
(*Q)->rear = NULL;
}
//判断队空算法
int isEmpty(LiQueue* Q)
{
if (Q->rear == NULL || Q->front == NULL)
return 1;
else
return 0;
}
//入队算法
void enQueue(LiQueue* Q, int x)
{
Qnode* p = (Qnode*)malloc(sizeof(Qnode));
p->data = x;
p->next = NULL;
if (Q->rear == NULL)
Q->front = Q->rear = p;
else
{
Q->rear->next = p;
Q->rear = p;
}
}
//出队算法
int deQueue(LiQueue* Q, int*x)
{
Qnode* p;
if (Q->rear == NULL)
return 0;
else
p = Q->front;
if (Q->front == Q->rear)
{
Q->front = NULL;
Q->rear = NULL;
}
else
Q->front = Q->front->next;
(*x) = p->data;
free(p);
return 1;
}
int main()
{
LiQueue* Q;
init(&Q);
if (isEmpty(Q))
{
printf("当前链队为空\n");
}
enQueue(Q,1);
enQueue(Q,2);
enQueue(Q,3);
int x;
while (!isEmpty(Q))
{
deQueue(Q, &x);
printf("%d ",x);
}
printf("\n");
return 0;
}