一维数组实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning (disable:4996)
#define OK 0
#define ERROR -1
#define MAXLEN 10
typedef int elemtype;
typedef int status;
typedef struct { //用一维数组来实现空间就是固定的
elemtype base[MAXLEN];
int front;
int rear;
}sqqueue;
status initqueue(sqqueue *q) {
if (q == NULL) return ERROR;
q->front = q->rear = 0;
return OK;
}
status clearqueue(sqqueue *q) {
if (q == NULL)return ERROR;
q->front = q->rear = 0;
return OK;
}
status enqueue(sqqueue *q,elemtype e) { //队列满了不能加空间
if (q == NULL) return ERROR;
if (q->rear >= MAXLEN) return ERROR;
q->base[q->rear++] = e;
return OK;
}
status dequeue(sqqueue *q, elemtype *e) {
if (q == NULL|| e == NULL)return ERROR;
if (q->front == q->rear)return ERROR;
*e = q->base[q->front++];
return OK;
}
int queuelength(sqqueue *q) {
if (q == NULL) return ERROR;
return q->rear - q->front;
}
堆空间中实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning (disable:4996)
#define OK 0
#define ERROR -1
#define QUEUE_INIT_SIZE 10
typedef int elemtype;
typedef int status;
typedef struct {
elemtype *base;
int front;
int rear;
}sqqueue;
status initqueue(sqqueue *q) {
if (q == NULL)return ERROR;
q->base = (elemtype *)malloc(sizeof(elemtype)*QUEUE_INIT_SIZE);
if (!q->base)return ERROR;
q->front = q->rear = 0;
return OK;
}
status destroyqueue(sqqueue *q) {
if (q == NULL)return ERROR;
if (q->base) {
free(q->base);
q->base = NULL;
}
q->front = q->rear = 0;
return OK;
}
int queuelength(sqqueue *q) {
if (q == NULL)return ERROR;
return (q->rear - q->front);
}
status enqueue(sqqueue *q,elemtype e) {
if (q == NULL)return ERROR;
if (q->rear>= QUEUE_INIT_SIZE) { //队列满 ,可能出现假溢出
q->base = (elemtype *)realloc(q->base, sizeof(elemtype)*(q->rear + 1)); //只要超过设定值,每次压入都分配空间
if (!q->base)return ERROR;
}
q->base[q->rear++] = e;
return OK;
}
status dequeue(sqqueue *q, elemtype *e) {
if (q == NULL || e == NULL) return ERROR;
if (q->rear == q->front)return ERROR; //队列空
*e = q->base[q->front++];
return OK;
}