目录
🍺0.前言
1.什么是队列
2. 队列的实现
2.1定义队列节点
2.2定义队列
2.3队尾入队列
2.4判断队列是否为空
2.5队头出队列
2.6 队列首元素
2.7队尾元素
2.8队列内的元素个数
2.9销毁队列
3.试运行
💎4.结束语
🍺0.前言
言C之言,聊C之识,以C会友,共向远方。各位博友的各位你们好啊,这里是持续分享数据结构知识的小赵同学,今天要分享的数据结构知识是队列,在这一章,小赵将会向大家展开聊聊队列。✊
1.什么是队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头
队列图片
其实上面说了很多,但其实队列很简单,正如它的名字一样,队列就是排队。
总结一下规律就是先进先出,就跟我们排队一样,谁排第一,谁的请求就可以先被执行。
2. 队列的实现
那么队列该怎么实现呢,其实也就前面两个方式,一个数组,一个链表,这里小赵并不推荐用数组,因为如果我们用数组的话,一直出头元素,会让我们很难确定这个时候我们的对头在哪里。所以这里小赵更推荐使用链表,因为链表可以使用我们的next的指针去找到下一个头。
2.1定义队列节点
typedef int QDataType; //创建一个节点 typedef struct QNode { QDataType data; struct QNode* next; }QNode; //队列 typedef struct Queue { QNode* front;//队头 QNode* rear;//队尾 int capacity;//队列中的元素 }Queue;
2.2定义队列
//定义队列 void Queueinit(Queue*Qhead) { Qhead->front=NULL; Qhead->rear = Qhead->front; Qhead->capacity = 0; }
2.3队尾入队列
//队尾入队列 void QueuePush(Queue* q, QDataType data) { QNode*newnode= (QNode*)malloc(sizeof(QNode));//创建一个新节点 newnode->next = NULL; newnode->data = data; if (q->front == NULL)//如果队列里面没有元素 { q->front = newnode; q->front->next = NULL; q->rear = q->front;//队尾和队首在一个位置 } else { q->rear->next = newnode; q->rear = newnode;//移动duiwei } q->capacity++;//数量+1 }
2.4判断队列是否为空
int QueueEmpty(Queue* q) { return q->capacity == 0;//如果为空返回非零,不为空返回零 }
2.5队头出队列
void QueuePop(Queue* q) { if (QueueEmpty(q)) return;//如果为空就返回 QNode* node = q->front;//保留头节点 if (q->front->next == NULL)//如果只有一个数 { q->front = NULL; q->rear = NULL; } else { q->front = q->front->next;//移动队首 } free(node);//释放原队首 node = NULL; q->capacity--; }
2.6 队列首元素
QDataType QueueFront(Queue* q) { if (QueueEmpty(q)) return;//如果为空就返回 return q->front->data; }
2.7队尾元素
QDataType QueueBack(Queue* q) { if (QueueEmpty(q))return; return q->rear->data; }
2.8队列内的元素个数
int QueueSize(Queue* q) { return q->capacity; }
2.9销毁队列
void QueueDestroy(Queue* q) { while (q->front)//遍历队列 { QNode* node = q->front; q->front = q->front->next; free(node); node = NULL; } q->rear = NULL; free(q);//要出去后手动制空 }
3.试运行
💎4.结束语
好了小赵今天的分享就到这里了,如果大家有什么不明白的地方可以在小赵的下方留言哦,同时如果小赵的博客中有什么地方不对也希望得到大家的指点,谢谢各位家人们的支持。你们的支持是小赵创作的动力,加油。
还没有评论,来说两句吧...