以下是几种队列算法的C语言实现:
- 顺序队列
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 50
typedef struct {
int data[MaxSize];
int front, rear;
}SqQueue;
// 初始化队列
void InitQueue(SqQueue* Q) {
Q->front = Q->rear = 0;
}
// 判断队列是否为空
int IsEmptyQueue(SqQueue Q) {
if (Q.front == Q.rear)
return 1;
else
return 0;
}
// 入队
int EnQueue(SqQueue* Q, int x) {
if ((Q->rear + 1) % MaxSize == Q->front)
return 0;
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MaxSize;
return 1;
}
// 出队
int DeQueue(SqQueue* Q, int* x) {
if (Q->front == Q->rear)
return 0;
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MaxSize;
return 1;
}
- 链式队列
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct LinkNode {
int data;
struct LinkNode* next;
}LinkNode;
typedef struct {
LinkNode* front, * rear;
}LinkQueue;
// 初始化队列
void InitLinkQueue(LinkQueue* Q) {
Q->front = Q->rear = (LinkNode*)malloc(sizeof(LinkNode));
Q->front->next = NULL;
}
// 判断队列是否为空
int IsEmptyLinkQueue(LinkQueue Q) {
if (Q.front == Q.rear)
return 1;
else
return 0;
}
// 入队
void EnLinkQueue(LinkQueue* Q, int x) {
LinkNode* p = (LinkNode*)malloc(sizeof(LinkNode));
p->data = x;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
}
// 出队
int DeLinkQueue(LinkQueue* Q, int* x) {
if (Q->front == Q->rear)
return 0;
LinkNode* p = Q->front->next;
*x = p->data;
Q->front->next = p->next;
if (Q->rear == p)
Q->rear = Q->front;
free(p);
return 1;
}
- 循环队列
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 50
typedef struct {
int data[MaxSize];
int front, rear;
}CirQueue;
// 初始化队列
void InitCirQueue(CirQueue* Q) {
Q->front = Q->rear = 0;
}
// 判断队列是否为空
int IsEmptyCirQueue(CirQueue Q) {
if (Q.front == Q.rear)
return 1;
else
return 0;
}
// 判断队列是否已满
int IsFullCirQueue(CirQueue Q) {
if ((Q.rear + 1) % MaxSize == Q.front)
return 1;
else
return 0;
}
// 入队
int EnCirQueue(CirQueue* Q, int x) {
if (IsFullCirQueue(*Q))
return 0;
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MaxSize;
return 1;
}
// 出队
int DeCirQueue(CirQueue* Q, int* x) {
if (IsEmptyCirQueue(*Q))
return 0;
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MaxSize;
return 1;
}
希望这些实现能够帮助到您。