QUEUE——队列(procedure)
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
int main()
{
int i;
Type x;
Type arr[] = {3,1,2,5,7,9};
QUEUE *q = NULL;
q = CreateQueue(10);
if(NULL == q)
return -1;
for(i = 0; i < sizeof(arr)/sizeof(*arr); i++)
{
EnQueue(q, arr + i);
}
FrontQueue(q, &x);
printf("x = %d\n", x);
DisptoryQueue(q);
return 0;
}
---------------------------------------------------------------
#ifndef _QUEUE_H__
#define _QUEUE_H__
struct node;
typedef int Type;
typedef struct node QUEUE;
QUEUE *CreateQueue(int);
void QueueMakeEmpty(QUEUE *);
int QueueIsEmpty(QUEUE *);
int QueueIsFull(QUEUE *);
int EnQueue(QUEUE *, const Type *);
int DeQueue(QUEUE *);
int FrontQueue(QUEUE *, Type *);
int FrontAndDeQueue(QUEUE *, Type *);
void DisptoryQueue(QUEUE *);
struct node{
Type *data;
int capacity;
int front;
int rear;
int size;
};
#endif
-------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
QUEUE *CreateQueue(int size)
{
QUEUE *q = malloc(sizeof(*q));
if(NULL == q)
return NULL;
q->data = malloc(sizeof(Type)*size); //队列的长度,队列的成员个数
if(NULL == q->data)
{
free(q);
return NULL;
}
q->capacity = size; //队列容量
QueueMakeEmpty(q);
return q;
}
void QueueMakeEmpty(QUEUE *q)
{
q->size = 0;
q->front = 1;
q->rear = 0;
}
int QueueIsEmpty(QUEUE *q)
{
return q->size == 0;
}
int QueueIsFull(QUEUE *q)
{
return q->size == q->capacity;
}
static int repeat(QUEUE *q, int rear) //队列队尾入队,
{
if(++rear == q->capacity)
rear = 0;
return rear;
}
int EnQueue(QUEUE *q, const Type *x)
{
if(QueueIsFull(q))
return -1;
q->rear = repeat(q, q->rear); //每次入队成功后,队尾rear置0.
q->data[q->rear] = *x;
q->size++;
return 0;
}
int DeQueue(QUEUE *q) //出队
{
if(QueueIsEmpty(q))
return -1;
q->front = repeat(q, q->front);
q->size--;
return 0;
}
int FrontQueue(QUEUE *q, Type *x) //查看队首
{
if(QueueIsEmpty(q))
return -1;
*x = q->data[q->front];
return 0;
}
int FrontAndDeQueue(QUEUE *q, Type *x) //查看队首并出队
{
if(FrontQueue(q, x) == 0)
return DeQueue(q);
return -1;
}
void DisptroyQueue(QUEUE *q)
{
free(q->data);
free(q);
}
QUEUE——队列(procedure)的更多相关文章
- C#基础---Queue(队列)的应用
Queue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面.但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不 ...
- 第19章 queue队列容器
/* 第19章 queue队列容器 19.1 queue技术原理 19.2 queue应用基础 19.3 本章小结 */ // 第19章 queue队列容器 // 19.1 queue技术原理 // ...
- atitit. java queue 队列体系and自定义基于数据库的队列总结o7t
atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...
- C#部分---特殊集合:stack栈集合、queue队列集合、哈希表集合。
1.stack栈集合:又名 干草堆集合 栈集合 特点:(1)一个一个赋值 一个一个取值(2)先进后出实例化 初始化 Stack st = new Stack(); //添加元素用push st.Pus ...
- 实现一个线程安全的Queue队列
使用装饰者模式实现一个线程安全的Queue队列. public class SynchronizedQueue<E> implements Queue<E>, Serializ ...
- Python自动化运维之16、线程、进程、协程、queue队列
一.线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行 ...
- Stack集合 Queue队列集合 Hashtable哈希表
Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 个数 Co ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)
今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系 ...
- (8)进程---Queue队列
# IPC Inter-Process Communication # 实现进程之间通信的两种机制: # 管道 Pipe 用的很少 # 队列 Queue 队列的特征:现进先出,栈属于后进后出 基本语法 ...
随机推荐
- 尝试封装自己的js库
学了js,用过jquery,然后想着让自己在js这一块有更深的提高,就想尝试着封装自己的js库,偶尔就添加自己想到的功能.有参考过其他大牛封装库的方法,不懂的地方也有借鉴过,但代码还是自己想,自己理解 ...
- C字符串总结+字符串库实现(增,改,删,查):
<一>,字符指针&字符数组 两者形式: 字符指针:char *p; 字符数组:char str[100]; 两者区别: 字符指针p是变量: 字符数组str是常量: 访问元素方式: ...
- HDU 3006 The Number of set(位运算 状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3006 题目大意:给定n个集合,每个集合都是由大于等于1小于等于m的数字组成,m最大为14.由给出的集合 ...
- 中文翻译:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介
1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...
- QQ登录接口(第三方登录接口)
CI框架 QQ接口(第三方登录接口PHP版) 本帖内容较多,大部分都是源码,要修改的地方只有一个,其他只要复制过去,就可以完美运行.本帖主要针对CI框架,不用下载SDK,按我下面的步骤,建文件,复制代 ...
- 【读书笔记】【CLR via C#】【第一章】The CLR’s Execution Model
内容提要 本章的目的是对.Net 框架的设计做一个总体的介绍,包括介绍框架中使用的一些技术.定义一些术语.同时会展示从源代码生成应用程序(或者一些包含了一些自定义类型的可以发布的组件),并且会解释程序 ...
- WebApi(三)-属性路由 自定义访问路径
启用属性路由: 1.在WebApiConfig中加入如下代码: //属性路由 config.MapHttpAttributeRoutes();
- jquery GET POST
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <head> ...
- 【MongoDB】应用场景
24 Use Cases24.1 适合场景 Archiving and event logging 归档和日志记录 Document and Content Management Systems ...
- 关于使用Element.getNodeValue()返回NULL的问题
使用DOM方法解析XML数据, 比如这个xml:<root> <name>admin</name></root> 在程序中读取 Document do ...