今天我们要聊的是 队列(Queue)
队列(Queue):
(01) 队列中数据是按照"先进先出(FIFO, First-In-First-Out)"方式进出队列的。
(02) 队列只允许在"队首"进行删除操作,而在"队尾"进行插入操作
队列也是一种线性表,很形象的比喻就是像排队一样,刚来的人入队(push)要排在队尾(rear),每次出队(pop)的都是队首(front)的人。
如下图所示:(图片来源于网络)
主要的函数有:
Queue 定义一个空队列
enqueue(item) 在队列尾部添加一个数据项,参数是数据项,无返回值
dequeue(item) 删除队列头部的数据项,无参数,返回值是被删除的数据
isEmpty(item) 检测队列是否为空
size() 返回队列数据项的数量
python 实现
class Queue:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def enqueue(self, item):
self.items.insert(0,item)
def dequeue(self):
return self.items.pop()
def size(self):
return len(self.items)
q=Queue()
q.enqueue(4)
q.enqueue('dog')
q.enqueue(True)
print(q.size())
注意这里 “队首” 跟 “队尾” 是相反的。
测试代码:
>>> q.size()
3
>>> q.isEmpty()
False
>>> q.enqueue(8.4)
>>> q.dequeue()
4
>>> q.dequeue()
'dog'
>>> q.size()
2
c 语言实现:数组实现的队列,并且只能存储 int 数据(代码链接)
#include <stdio.h>
#include <malloc.h>
/**
* C 语言: 数组实现的队列,只能存储int数据。
*
* @author skywang
* @date 2013/11/07
*/
// 保存数据的数组
static int *arr=NULL;
// 队列的实际大小
static int count;
// 创建“队列”
int create_array_queue(int sz)
{
arr = (int *)malloc(sz*sizeof(int));
if (!arr)
{
printf("arr malloc error!");
return -1;
}
count = 0;
return 0;
}
// 销毁“队列”
int destroy_array_queue()
{
if (arr)
{
free(arr);
arr = NULL;
}
return 0;
}
// 将val添加到队列的末尾
void add(int val)
{
arr[count++] = val;
}
// 返回“队列开头元素”
int front()
{
return arr[0];
}
// 返回并删除“队列开头元素”
int pop()
{
int i = 0;;
int ret = arr[0];
count--;
while (i++<count)
arr[i-1] = arr[i];
return ret;
}
// 返回“队列”的大小
int size()
{
return count;
}
// 返回“队列”是否为空
int is_empty()
{
return count==0;
}
void main()
{
int tmp=0;
// 创建“队列”
create_array_queue(12);
// 将10, 20, 30 依次推入队列中
add(10);
add(20);
add(30);
// 将“队列开头的元素”赋值给tmp,并删除“该元素”
tmp = pop();
printf("tmp=%d\n", tmp);
// 只将“队列开头的元素”赋值给tmp,不删除该元素.
tmp = front();
printf("tmp=%d\n", tmp);
add(40);
// 打印队列
printf("is_empty()=%d\n", is_empty());
printf("size()=%d\n", size());
while (!is_empty())
{
printf("%d\n", pop());
}
// 销毁队列
destroy_array_queue();
}
参考链接:
(1)http://interactivepython.org/runestone/static/pythonds/BasicDS/ImplementingaQueueinPython.html