1.队列的特点:队列是一种先进先出的数据结构,在队尾入数据,在队头插数据,根据其结构特点,采用链表的形式比较好.
typedef struct QListNode
{
struct QListNode* _next;
QDataType _data;
}QNode;
// 队列的结构
typedef struct Queue
{
QNode* _front;
QNode* _rear;
}Queue;
// 初始化队列
void QueueInit(Queue* q);
// 队尾入队列
void QueuePush(Queue* q, QDataType data);
// 队头出队列
void QueuePop(Queue* q);
// 获取队列头部元素
QDataType QueueFront(Queue* q);
// 获取队列队尾元素
QDataType QueueBack(Queue* q);
// 获取队列中有效元素个数
int QueueSize(Queue* q);
// 检测队列是否为空,如果为空返回非零结果,如果非空返回0
int QueueEmpty(Queue* q);
// 销毁队列
void QueueDestroy(Queue* q);
void QueueInit(Queue* q)
{
assert(q);
q->size = 0;
q->front = NULL;
q->rear = NULL;
}
void QueuePush(Queue* q, QDataType data)
{
assert(q);
QNode* str = malloc(sizeof(QNode));
str->next = NULL;
str->data = data;
if (q->front == NULL)
{
assert(q->rear == NULL);
q->front = str;
q->rear = str;
}
else
{
q->rear->next = str;
q->rear = str;
}
q->size++;
}
int QueueEmpty(Queue* q)
{
assert(q);
return q->front == NULL;
}
void QueuePop(Queue* q)
{
assert(q);
assert(!QueueEmpty(q));
QNode* str = q->front->next;
if (q->front->next == NULL)
{
free(q->front);
q->front = str;
q->rear = str;
}
else
{
free(q->front);
q->front = str;
}
q->size--;
}
QDataType QueueFront(Queue* q)
{
assert(q);
assert(!QueueEmpty(q));
return q->front->data;
}
QDataType QueueSize(Queue* q)
{
assert(q);
return q->size;
}
void QueueDestroy(Queue* q)
{
assert(q);
QNode* str = q->front;
QNode* cur = NULL;
while (str)
{
cur = str->next;
free(str);
str = cur;
}
q->size = 0;
q->front = NULL;
q->rear = NULL;
}
QDataType QueueBack(Queue* q)
{
assert(q);
assert(!QueueEmpty(q));
return q->rear->data;
}
时间紧迫,只能写到这,以后慢慢补.