队列的基本概念
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。
队列的实现:队列可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率比较低。
以下是实现队列的基本操作
#pragma once
typedef struct Node {
int value;
struct Node *next;
} Node;
//队列的结构
typedef struct Queue {
Node *head;
Node *last;
}Queue;
//初始化队列
void QueueInit(Queue* q)
{
q->head = q->last = NULL;
}
//队尾入队列
void QueuePush(Queue* q, int v) {
Node *node = (Node *)malloc(sizeof(Node));
node->value = v;
node->next = NULL;
if (q->head == NULL) {
q->head = node;
q->last = node;
}
else {
q->last->next = node;
q->last = node;
}
}
//队头出队列
void Queuepop(Queue* q) {
Node *second = q->head->next;
free(q->head);
q->head = Node * second;
if (q->head = NULL)
{
q->last = NULL;
}
}
//获取队列头元素
QDataType QueueFront(Queue* q) {
return q->head->value;
}
//获取队列队尾元素
QDataType QueueBack(Queue* q) {
return q->last->value;
}
//获取队列中元素个数
int QueueSize(Queue* q) {
int size = 0;
for (Node *c = q->head; c != NULL; c = c->next)
{
size++;
}
return size++;
}
//检测队列是否为空
int QueueEmpty(Queue* q) {
if (q->head = NULL) {
return 1;
}
else {
return 0;
}
}
//销毁队列
void QueueDestroy(Queue *q) {
Node *cur, *next;
for (cur = q->head; cur != NULL; cur = next) {
next = cur->next;
free(cur);
}
q->head = q->last = NULL;
}
队列和栈的基本区别
队列:先进先出,
栈 :先进后出
队列只能在表的一端进行插入和另一端进行删除。
栈是只能在一端进行删除和插入操作