头文件——————————————————————————————
#ifndef _QUEUE_H_
#define _QUEUE_H_
#include <stdlib.h>
#define Element int
struct node
{
Element data;
struct node *next;
};
typedef struct node *PtrToNode;
typedef struct _Queue
{
PtrToNode head;
PtrToNode rear;
} *Queue;
//头进尾出
int IsEmpty(Queue q);
Queue CreateQueue();
void DestroyQueue(Queue q);
void MakeEmpty(Queue q);
void Enqueue(Element x, Queue q);
Element Front(Queue q);
Element Rear(Queue q);
void Dequeue(Queue q);
#endif
源文件————————————————————————————
#include <iostream>
#include "./Queue.h" int IsEmpty(Queue q)
{
return q->head == q->rear && q->head == NULL;
}
Queue CreateQueue()
{
Queue q = (Queue)malloc(sizeof(struct _Queue));
if(NULL == q) return NULL;
q->head = q->rear = NULL;
return q;
}
void DestroyQueue(Queue q)
{
MakeEmpty(q);
free(q);
}
void MakeEmpty(Queue q)
{
while(!IsEmpty(q))
Dequeue(q);
}
void Enqueue(Element x, Queue q)//头进尾出
{
if(NULL == q) return ;
PtrToNode p = (PtrToNode)malloc(sizeof(struct node));
if(NULL == p) return ;
p->data = x;
if(IsEmpty(q))
q->rear = p;
p->next = q->head;
q->head = p;
}
Element Front(Queue q)
{
return q->head->data;
}
Element Rear(Queue q)
{
return q->rear->data;
}
void Dequeue(Queue q)//头进尾出
{
if(NULL == q || IsEmpty(q)) return ;
PtrToNode prev = q->head;
while(NULL != prev && prev != q->rear && prev->next != q->rear)
prev = prev->next;
if(NULL == prev) return ;
if(prev == q->rear)
{
q->head = q->rear = NULL;
free(prev);
}
PtrToNode tmp = prev->next;
prev->next = NULL;
q->rear = prev;
free(tmp);
/*if(q->head == q->rear)
{
PtrToNode tmp = q->head;
free(tmp);
q->head = q->rear = NULL;
}
PtrToNode prev = q->head;
while(NULL != prev && prev->next->data != q->rear->data)
prev = prev->next;
PtrToNode tmp = prev->next;
prev->next = NULL;
q->rear = prev;
free(tmp);
*/
}

  

队列queue的C实现的更多相关文章

  1. Python进阶【第二篇】多线程、消息队列queue

    1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...

  2. Java中的队列Queue,优先级队列PriorityQueue

    队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...

  3. jquery 的队列queue

    使用示列代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  4. Windows Azure Service Bus (2) 队列(Queue)入门

    <Windows Azure Platform 系列文章目录> Service Bus 队列(Queue) Service Bus的Queue非常适合分布式应用.当使用Service Bu ...

  5. Windows Azure Service Bus (3) 队列(Queue) 使用VS2013开发Service Bus Queue

    <Windows Azure Platform 系列文章目录> 在之前的Azure Service Bus中,我们已经介绍了Service Bus 队列(Queue)的基本概念. 在本章中 ...

  6. (C#)使用队列(Queue)解决简单的并发问题

    (C#)使用队列(Queue)解决简单的并发问题 2015-07-16 13:04 13265人阅读 评论(8) 收藏 举报  分类: Asp.Net(8)  版权声明:本文为博主原创文章,未经博主允 ...

  7. STL中的单向队列queue

    转载自:http://blog.csdn.net/morewindows/article/details/6950917 stl中的queue指单向队列,使用时,包含头文件<queue>. ...

  8. java09 队列Queue与Deque

    队列Queue与Deque. Enumeration Hashtable与Hashtable子类Properties(资源配置文件) 引用类型(强.软.弱.虚)与WeakHashMap Identit ...

  9. 队列Queue和栈

    1.队列Queue是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式,只能从线性表的一段添加(offer)元素, 从另一段取出(poll)元素,队列遵循先进先出的原则. 2.J ...

  10. 消息队列Queue大全

    消息队列Queue大全 (http://queues.io/) 作业队列,消息队列和其他队列.几乎所有你能想到的都在这. 关于 那里有很多排队系统.他们每个人都不同,是为解决某些问题而创建的.这个页面 ...

随机推荐

  1. JavaWeb学习总结(十二)——Session

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  2. Windows Server 2016 桌面环境的自动配置脚本

    除非学习要求,还是建议使用Windows 10 LTSB 2016或其他桌面系统. github:https://github.com/m2nlight/WindowsServerToWindowsD ...

  3. android: 内容提供器简介

    我们学了 Android 数据持久化的技术,包括文件存储.SharedPreferences 存 储.以及数据库存储.不知道你有没有发现,使用这些持久化技术所保存的数据都只能在当 前应用程序中访问.虽 ...

  4. Activiti 查询最新版本的流程定义

    package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io ...

  5. 在 Xen 虚拟机下修改系统当前时间

    在 Xen 虚拟机下修改系统当前时间 Xen 虚拟机默认不允许不同的虚拟机使用不同的系统时间,因此所有虚拟机的系统时间都会同宿主机的系统时间严格同步,用 date 命令修改虚拟机系统时间时虽然提示成功 ...

  6. react native TypeError network request failed

        如果使用fetch获取数据,用的是POST方法,注意headers要添加请求头.当请求为GET时不能用body,当为POST时必须包含body,设置头部之后就一切正常了.   fetch(&q ...

  7. MAC下的命令操作

    打印环境变量:echo $PATH设置环境变量:export PATH=$PATH:/usr/local/git/bin应用:在git-scm下载git2.0.1版本,图形安装后,直接在终端敲giv ...

  8. java.lang.ClassNotFoundException: org.junit.Assume$AssumptionViolatedException

    java.lang.ClassNotFoundException: org.junit.Assume$AssumptionViolatedException 在spring框架中进行单元测试,出现标题 ...

  9. StringBuffer&StringBuilder区别详解

    序言 StringBuffer与StringBuilder是java.lang包下被大家熟知的两个类.其异同为:一.长度都是可扩充的:二.StringBuffer是线程安全的,StringBuilde ...

  10. 用node开发repl应用

    前言 每次看到一些库npm -g install xx然后,执行xx就可以跑起来,这不就是一个shell工具了吗,那么我不就可以不用学习shell语法,直接用js写命令行脚本了吗! 什么是REPL应用 ...