队列
队列是先进先出,像排队一样
#include<stdio.h>
#include<stdlib.h>
#define max 100
typedef int ElemType;
typedef struct {
ElemType* data;
int front;
int rear;
}Queue;
//初始化
Queue* initQueue() {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->data = (ElemType*)malloc(sizeof(ElemType));
q->front = 0;
q->rear = 0;
return q;
}
//出队
ElemType outQueue(Queue* q) {
if (q->front == q->rear) {
printf(“空的”);
return 0;
}
ElemType e = q->data[q->front];
q->front++;
return e;
}
//判断是否为满
int queueFull(Queue* q) {
if (q->front > 0) {
int step = q->front;
for (int i = q->front; i < q->rear; i++)
{
q->data[i - step] = q->data[i];
}
q->front = 0;
q->rear = q->rear - step;
return 1;
}
else {
printf(“真的满了”);
return 0;
}
}
//入队
int inQueue(Queue* q, ElemType e) {
if (q->rear >= max) {
if (!(queueFull))//这时候判断是否真的满了
{
return 0;
}
}
q->data[q->rear] = e;
q->rear++;
return 1;
}
//循环队列-入队
int cycleIn(Queue* q, ElemType e) {
if ((q->rear + 1) % max == q->front) {
printf(“满了”);
return 0;
}
q->rear = (q->rear + 1) % max;
return 1;
}
int main() {
Queue* q = initQueue();
inQueue(q, 10);
inQueue(q, 20);
inQueue(q, 30);
printf(“%d”, outQueue(q));
printf(“%d”, outQueue(q));
return 0;
}