队列
基于顺序表实现;
结构:
定义一个数组来存储数据;
头指针,尾指针;
相关操作:
typedef struct Queue {
int *data;
int head, tail, length;
} Queue;
Queue *init(int n) { // 初始化队列
Queue *q = (Queue *)malloc(sizeof(Queue));
q->data = (int *)malloc(sizeof(int) * n); //初始化数组
q->length = n; // 初始化数组长度
q->head = q->tail = 0; //开始时,头指针和尾指针都指向第一个元素
return q;
}
void clear(Queue *q) {
if (q == NULL) return ;
free(q->data);
free(q); // 先释放队列中的数据,再释放队列
return ;
}
int empty(Queue *q) {
return q->head == q->tail; //
}
int front(Queue *q) { //打印输出队首元素
return q->data[q->head];
}
int push(Queue *q, int val) {
if (q == NULL) return 0;
if (q->tail == q->length) return 0;
q->data[q->tail++] = val;
return 1;
}
int pop(Queue *q) {
if (q == NULL) return 0;
if (empty(q)) return 0;
q->head += 1;
return 1;
}
void output(Queue *q) {
if (q == NULL) return ;
printf("[");
for (int i = q->head; i < q->tail; i++) {
i != q->head && printf(",");
printf("%d", q->data[i]);
}
printf("]\n");
return ;
}