1.思路
定义一个特定长度的数组,用head、tail两个指针记录队列内元素的头和尾,进而实现队列的入队出队等基本操作。
2.代码
#include<iostream>
using namespace std;
const int N = 10;
struct queue {
int head;
int tail;
int len;
int *arr;
};
queue* create(int len) {
if(len <= 0)
return NULL;
queue* q = (queue*)malloc(sizeof(queue));
q->len = len;
q->head = 0;
q->tail = 0;
q->arr = (int*)malloc(sizeof(int) * len);
return q;
}
void enqueue(queue* q, int n) {
if(q == NULL || q->arr == NULL) {
cout << "queue failed" << endl;
return;
}
if(q->tail == q->len) {
cout << "queue full" << endl;
return;
}
q->arr[q->tail] = n;
++(q->tail);
}
int dequeue(queue* q) {
if(q == NULL || q->arr == NULL) {
cout << "queue failed" << endl;
return 0;
}
if(q->head == q->tail) {
cout << "queue empty" << endl;
return 0;
}
int res = q->arr[q->head];
(q->head)++;
return res;
}
bool isfull(queue* q) {
return q->tail == q->len;
}
bool isempty(queue* q) {
return q->head == q->tail;
}
void destroy(queue* q) {
free(q->arr);
q->arr = NULL;
free(q);
q = NULL;
}
int main() {
queue* q = create(N); //子函数(create(N))调用的malloc可以在子函数(destroy(q))中free
enqueue(q, 1);
enqueue(q, 5);
enqueue(q, 3);
cout << dequeue(q) << endl;
cout << dequeue(q) << endl;
enqueue(q, 9);
cout << dequeue(q) << endl;
cout <<"is empty?" << isempty(q) << endl;
cout << dequeue(q) << endl;
cout <<"is empty?" << isempty(q) << endl;
destroy(q);
cout << dequeue(q) << endl;
system("pause");
return 0;
}
3.运行结果