数据结构【一】:简单队列simple queue
简单的FIFO队列实现,非线程安全!
1.queue.h : abstract data type queue
#ifndef CUR_QUEUE_H
#define CUR_QUEUE_H
#include<stdlib.h>
struct node{
int value;
struct node * next;
}; typedef struct queue{
int max,cur;
struct node * head, * tail;
}queue; extern queue* empty_queue(int _max);
extern int queue_free(queue *q);
extern int is_empty(const queue *q);
extern int is_full(const queue *q);
extern int enqueue(struct node *item, queue *q);
extern struct node* dequeue(queue *q); #endif
2.queue.c
#include "queue.h" queue* empty_queue(int _max)
{
queue *q = malloc(sizeof(queue));
q->head = q->tail = NULL;
q->max = _max;
q->cur = ;
return q;
} int queue_free(queue *q)
{
while(!is_empty(q))
free(dequeue(q));
free(q);
} int is_empty(const queue *q)
{
return q->cur == ;
} int is_full(const queue *q)
{
return q->cur == q->max;
} int enqueue(struct node *item, queue *q)
{
if(is_full(q)) return -;
if(is_empty(q))
q->head = q->tail = item;
else
{
q->tail->next = item;
q->tail = item;
}
q->cur++;
return ;
} struct node* dequeue(queue *q)
{
if(is_empty(q)) return NULL;
struct node * temp = q->head;
q->head = q->head->next;
q->cur--;
return temp;
}
3.main.c
#include<stdio.h>
#include<stdlib.h>
#include "queue.h" void main()
{
int i;
queue *q = empty_queue(); for(i=; i<=; i++){ struct node * item = (struct node *)malloc(sizeof(struct node));
item->value = i;
item->next = NULL; printf("is_full : %d\n",is_full(q));
if(is_full(q)) {
printf("queue is full\n");
printf("enqueue : %d\n",enqueue(item,q));
break;
}
printf("enqueue : %d\n",enqueue(item,q));
} while(!is_empty(q))
{
struct node * item = dequeue(q);
if(item != NULL){
printf("value : %d ,current : %d\n", item->value,q->cur);
free(item);
}
}
queue_free(q);
}
测试结果:

数据结构【一】:简单队列simple queue的更多相关文章
- 数据结构——线性表——队列(queue)
队列也是一种特殊的线性表,它的特点是先入先出(FIFO,即first in first out).它的意思也很直观,想象一下排队买票,先排的人先买(插队是不对的,所以别去想).它也是很常用的数据结构, ...
- 数据结构14:队列(Queue),“先进先出”的数据结构
队列是线性表的一种,在操作数据元素时,和栈一样,有自己的规则:使用队列存取数据元素时,数据元素只能从表的一端进入队列,另一端出队列,如图1. 图1 队列示意图 称进入队列的一端为“队尾”:出队列的一端 ...
- python 队列(QUEUE)
QUEUE python中多线程编程的数据结构 基本FIFO队列 class Queue.Queue(maxsize=0) 先进先出,maxsize为队列中能存放的数据个数上限. import Que ...
- simple queue(简单队列)
Virtual host-虚拟主机 虚拟主机,用于进行逻辑隔离,是最上层的路由,类似于redis的16个db,是一种逻辑上的隔离 一个virtualhost里面可以有若干个Exchange和Queue ...
- HTTPSQS(HTTP Simple Queue Service)消息队列
HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key ...
- 第二十四篇 玩转数据结构——队列(Queue)
1.. 队列基础 队列也是一种线性结构: 相比数组,队列所对应的操作数是队列的子集: 队列只允许从一端(队尾)添加元素,从另一端(队首)取出元素: 队列的形象化描述如下图: 队列是一种先进 ...
- C++数据结构之链式队列(Linked Queue)
C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...
- [置顶] ※数据结构※→☆线性表结构(queue)☆============循环队列 顺序存储结构(queue circular sequence)(十)
循环队列 为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量.存储在其中的队列称为循环队列(Circular Queue). ...
- PHP实现队列(Queue)数据结构
队列(Queue),是一种特殊的先进先出线性表,其只能在前端进行删除操作(一般称为出队),在后端进行插入操作(一般称为入队).进行删除操作的端称为队头,进行插入操作的端称为队尾.队列,是按照先进先出或 ...
随机推荐
- C语言中返回字符串函数的四种实现方法 2015-05-17 15:00 23人阅读 评论(0) 收藏
C语言中返回字符串函数的四种实现方法 分类: UNIX/LINUX C/C++ 2010-12-29 02:54 11954人阅读 评论(1) 收藏 举报 语言func存储 有四种方式: 1.使用堆空 ...
- tomcat 粗略笔记
GlobalNamingResources 存在于server.xml中,定义全局公共数据源,如果host中有大量引用相同的数据源,那么可以都配在这里 <GlobalNamingResource ...
- tomcat的 JNDI 配置
tomcat的conf/server.xml 配置 尽量用简单版 <Context path="/cas" docBase="D:\YC\zqV7\cas\WebR ...
- django 命名空间详解
include(module[, namespace=None, app_name=None ]) include(pattern_list) include((pattern_list, app_n ...
- Windows 2003 服务器安全设置-批处理 (附参考链接)
长期维护windows服务器终结出来的安全设置批处理与大家分享,复制以下全部内容用记事本另存为bat或者cmd执行 ===================分隔符号=================== ...
- Domino 迁移到Exchange 服务器 之在Domino Server 创建用户!
我们打开Lotus Admin,导航到注册,点击到需要设置的人,然后再选择验证者标识符选择相应的组织配置标识符:
- c++中获取代码运行时间
include<ctime> time_t begin,end; begin=clock(); { .............//被测试的代码 } end=clock(); cout ...
- 71道经典Android面试题和答案
,,面试题1. 下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 ...
- Swift学习笔记十五
自动引用计数(Automatic Reference Counting) 和OC一样,Swift用自动引用计数机制来跟踪和管理你应用程序的内存,大多数情况下,你不需要考虑自己管理内存,Swift会自动 ...
- ubuntu完美卸载JDK
要删除 OpenJDK (如果已安装的话).首先,检查是安装的哪个 OpenJDK包. # dpkg --list | grep -i jdk 移除 openjdk包: # apt-get purge ...