队列queue的C实现
头文件——————————————————————————————
#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实现的更多相关文章
- Python进阶【第二篇】多线程、消息队列queue
1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...
- Java中的队列Queue,优先级队列PriorityQueue
队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...
- jquery 的队列queue
使用示列代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- Windows Azure Service Bus (2) 队列(Queue)入门
<Windows Azure Platform 系列文章目录> Service Bus 队列(Queue) Service Bus的Queue非常适合分布式应用.当使用Service Bu ...
- Windows Azure Service Bus (3) 队列(Queue) 使用VS2013开发Service Bus Queue
<Windows Azure Platform 系列文章目录> 在之前的Azure Service Bus中,我们已经介绍了Service Bus 队列(Queue)的基本概念. 在本章中 ...
- (C#)使用队列(Queue)解决简单的并发问题
(C#)使用队列(Queue)解决简单的并发问题 2015-07-16 13:04 13265人阅读 评论(8) 收藏 举报 分类: Asp.Net(8) 版权声明:本文为博主原创文章,未经博主允 ...
- STL中的单向队列queue
转载自:http://blog.csdn.net/morewindows/article/details/6950917 stl中的queue指单向队列,使用时,包含头文件<queue>. ...
- java09 队列Queue与Deque
队列Queue与Deque. Enumeration Hashtable与Hashtable子类Properties(资源配置文件) 引用类型(强.软.弱.虚)与WeakHashMap Identit ...
- 队列Queue和栈
1.队列Queue是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式,只能从线性表的一段添加(offer)元素, 从另一段取出(poll)元素,队列遵循先进先出的原则. 2.J ...
- 消息队列Queue大全
消息队列Queue大全 (http://queues.io/) 作业队列,消息队列和其他队列.几乎所有你能想到的都在这. 关于 那里有很多排队系统.他们每个人都不同,是为解决某些问题而创建的.这个页面 ...
随机推荐
- Javascript实现计数器,定时警告和停止
<html> <head> <meta charset="utf-8"> <title>定时警告</title> < ...
- Maven学习总结(一)——Maven入门——转载
一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1.1. ...
- Leetcode 234 Palindrome Linked List 链表
判断链表是否是回文. 我直接将链表的一半进行倒置,然后将两半的链表进行比较 /** * Definition for singly-linked list. * struct ListNode { * ...
- OpenGL学习进程(11)第八课:颜色绘制的详解
本节是OpenGL学习的第八个课时,下面将详细介绍OpenGL的颜色模式,颜色混合以及抗锯齿. (1)颜色模式: OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. R ...
- SQL行转列和列转行
行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和 ...
- Activiti保存流程图时diagrms中没有生成png解决办法
window ——> preferences——>activiti——>save——>选中create process definition image when saving ...
- 在C#中如何读取枚举值的描述属性
在C#中,有时候我们需要读取枚举值的描述属性,也就是说这个枚举值代表了什么意思.比如本文中枚举值 Chinese ,我们希望知道它代表意思的说明(即“中文”). 有下面的枚举: 1 2 3 4 5 6 ...
- react native TypeError network request failed
如果使用fetch获取数据,用的是POST方法,注意headers要添加请求头.当请求为GET时不能用body,当为POST时必须包含body,设置头部之后就一切正常了. fetch(&q ...
- go语言实现一个简单的登录注册web小程序
最近学习golang也有一段时间了,基础差不多学了个大概,因为本人是java程序员,所以对web更感兴趣.根据<go web编程>中的例子改编一个更简单的例子,供新手参考,废话不多说,上菜 ...
- AngularJS和DataModel
通常,在AngularJS中使用JSON作为存储数据的模型.我们可能这样在controller中写model: app.controller('BookController',['$scope',fu ...