#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)的更多相关文章

  1. C#基础---Queue(队列)的应用

       Queue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面.但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不 ...

  2. 第19章 queue队列容器

    /* 第19章 queue队列容器 19.1 queue技术原理 19.2 queue应用基础 19.3 本章小结 */ // 第19章 queue队列容器 // 19.1 queue技术原理 // ...

  3. atitit. java queue 队列体系and自定义基于数据库的队列总结o7t

    atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...

  4. C#部分---特殊集合:stack栈集合、queue队列集合、哈希表集合。

    1.stack栈集合:又名 干草堆集合 栈集合 特点:(1)一个一个赋值 一个一个取值(2)先进后出实例化 初始化 Stack st = new Stack(); //添加元素用push st.Pus ...

  5. 实现一个线程安全的Queue队列

    使用装饰者模式实现一个线程安全的Queue队列. public class SynchronizedQueue<E> implements Queue<E>, Serializ ...

  6. Python自动化运维之16、线程、进程、协程、queue队列

    一.线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行 ...

  7. Stack集合 Queue队列集合 Hashtable哈希表

    Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 个数 Co ...

  8. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  9. python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

    今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系 ...

  10. (8)进程---Queue队列

    # IPC Inter-Process Communication # 实现进程之间通信的两种机制: # 管道 Pipe 用的很少 # 队列 Queue 队列的特征:现进先出,栈属于后进后出 基本语法 ...

随机推荐

  1. Codeforces 553C Love Triangles(图论)

    Solution: 比较好的图论的题. 要做这一题,首先要分析love关系和hate关系中,love关系具有传递性.更关键的一点,hate关系是不能成奇环的. 看到没有奇环很自然想到二分图的特性. 那 ...

  2. Activity singleInstance启动模式

    全局单例模式 如果 是新建Activity, 则新建一个Task, 然后将ActivityRecord单独放在其中 如果已经存在这个Activity, 则直接将这个Activity转到前台

  3. pip assert_source_matches_version(self)版本验证报错Source in %s has version %s, which satisfies requirement %s的解决方式

    在win8.1下为了安装flask模块,开始安装pip,结果发生了上篇博客里面的错误ntpath join(path, *paths) 发生UnicodeDecodeError.解决之后继续发现版本验 ...

  4. 2016021902 - linux解压缩命令

    转载自:http://blog.csdn.net/luo86106/article/details/6946255 .gz 解压1:gunzip FileName.gz 解压2:gzip -d Fil ...

  5. Linux Kernel Makefile Test

    一.本文说明 本文为linux内核Makefile整体分析的续篇,是依据Linux内核Makefile体系的主要内容编写一个简要的测试工程.Linux内核Makefile体系就好像一只“大鸟”,而这篇 ...

  6. C语言中”#x“的含义

    #x 的含义是给x添加“”,也就是说将字符常量.常量转换为字符串常量

  7. uboot内存分布

    一.uboot的内存分布图 山人自己画的图 华清远见的图 二.如何修改编译地址 board/smdk2410/config.mk中定义有TEXT_BASE TEXT_BASE = 0x33F80000 ...

  8. Xcode7之后常见问题整理-b

    一.Xcode7,iOS9之后传出来的什么Xcode有鬼,被植入代码片段什么的,可以看看,了解一下http://drops.wooyun.org/news/8864 二.bitcode问题--未正确设 ...

  9. 2015_WEB页面前端工程师_远程测题_东方蜘蛛_1

    请使用HTML+CSS实现如下效果: 1. 使用CSS Sprites,实现如图1效果,素材图片为: icons.png: 2. 使用脚本语言验证邮箱.密码的必填以及邮箱的合法性: 若验证失败,则出现 ...

  10. 转载:如何避免代码中的if嵌套

    http://top.jobbole.com/4960/ http://stackoverflow.com/questions/24430504/how-to-avoid-if-chains 在Sta ...