前言
最近在学数据结构和算法方面的一些东西,毕竟算法才是编程的灵魂,在外面实习了一年,一直也是觉得自己的技术还十分有限,大概我就是那种没怎么打基础就开始撸项目的野生程序员吧,因为基础差所以经常在各种小问题上被难倒,回头来看看其实这都是大家踩过的坑,归根到底还是自己急于求成,所以就开始学一些基础,也为了以后回到学校继续学业做一些铺垫。此文章中代码参考了一本浅显入门的算法书 《啊哈,算法》
1 队列
1.1 什么是队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。(摘自百度百科)
通俗来讲,队列就像我们排队,很多时候我们都会遇到排队的场景 (比如买票,食堂打饭,安检,买奶茶啥的),在这种场景下,队伍最前端的我们可以称之为队首,队伍最后端的可以称之为队尾,当队首办理完业务 (买到了票,食堂阿姨给打了整整一勺肉啥的) 就会从队伍中离开,这个过程我们称为出队,当然队列外部的数据想要进入队列,就必须从排在队尾之后 (理想状态下厚颜无耻的插队狗这种生物是不存在的) 成为新的队尾,这个过程我们可以成为入队。因此我们称这种模式为先进先出(First In First Out)
1.2 队列的组成
队列的组成有三个元素,即队首、队尾以及数据数组
下面是一个队列的结构体示例
struct quene{
/*--这是一个队列的结构体,包含数据数组,队首和队尾--*/
int data[100];
int head;
int tail
};
1.3 如何实现一个队列
以下是示例代码,完成了数组的初始化,入队,出队的基础操作
#include<stdio.h>
#include<stdlib.h>
struct quene{
/*--这是一个队列的结构体,包含数据数组,队首和队尾--*/
int data[100];
int head;
int tail
};
int main(){
struct quene q;
int i;
/*--初始化队列--*/
q.head = 1;
q.tail = 1;
for(i = 1;i <= 9;i++){
/*--队列中插入9个数--*/
scanf("%d",&q.data[q.tail]);
q.tail++;
}
while(q.head < q.tail){
/*--打印队首并将队首出队--*/
printf("%d\n",q.data[q.head]);
q.head++;
q.data[q.tail] = q.data[q.head];
q.tail++;
q.head++;
}
system("pause");
return 0;
}