# [库]泛型队列

/*
Author:avalon qq:1243128
Date: 05-10-04 21:18
Description:泛型队列
*/

#ifndef  AVALON_QUEUE_H
#define  AVALON_QUEUE_H

#ifndef  AVA_BOOL
#define  AVA_BOOL
#define  TRUE      1
#define  FALSE     0
typedef  int    BOOL;
#endif

extern LHandle InitQueue(size_t type);
/*构造*/
extern BOOL  QueueEmpty(LHandle q);
/*empty?*/
extern int   QueueLength(LHandle q);
/*length*/
extern BOOL  GetHead(LHandle q, void * elem);
/*若队列不为空,则COPY队头元素,并返回TRUE*/
extern BOOL  EnQueue(LHandle q,void * elem);
/*插入元素elem为新的队尾元素*/
extern BOOL DeQueue(LHandle q,void * elem);
/*如elem不为空,则将删除后的头结点值赋值给elem,返回TRUE*/
extern BOOL ClearQueue(LHandle q);
/*清空*/
extern BOOL DestroyQueue(LHandle * q);
/*销毁*/
#endif

//////////////////////

///////////////////

/*
Author:avalon qq:1243128
Date: 05-10-04 21:18
Description:泛型队列
*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#ifndef  AVA_BOOL
#define  AVA_BOOL
#define  TRUE      1
#define  FALSE     0
typedef  int    BOOL;
#endif

typedef struct Node{
void         *  data;/*数据指针*/
struct Node  *  next;/*下一结点*/
}Node , *NHandle;

NHandle  front;/*头指针*/
NHandle  rear ;/*尾指针*/
int      size ;/*长度*/
size_t   type ;
/*

*/
static  NHandle AllocNode(LHandle S,void * elem)
{/*分配结点*/
NHandle node_temp = (NHandle)malloc(sizeof(Node));
void  * data_temp ;
assert(NULL !=node_temp);
assert(NULL !=S);
assert(NULL !=elem);
data_temp = malloc(S->type);
assert(NULL !=data_temp);
memcpy(data_temp,elem,S->type);/*copy data*/
node_temp->data = data_temp;   /*member data 赋值*/

return node_temp;
}
static BOOL  FreeNode(NHandle * node)
{/*释放结点*/
free( (*node)->data);
free( *node);
return TRUE;
}
/*

*/
extern LHandle InitQueue(size_t type)
{/*构造*/
assert(NULL !=temp);
temp->front = temp->rear =NULL;
temp->size  = 0;
temp->type  = type;
return temp;
}
extern BOOL  QueueEmpty(LHandle q)
{/*empty?*/
assert(NULL !=q);
return ( 0==q->size)?TRUE:FALSE;
}
extern int   QueueLength(LHandle q)
{/*length*/
assert(NULL !=q);
return q->size;
}
extern BOOL  GetHead(LHandle q, void * elem)
{/*若队列不为空,则COPY队头元素,并返回TRUE*/
assert(NULL !=q);
assert(NULL !=elem);
if(NULL== q->front)return FALSE;
memcpy(elem,q->front->data,q->type);
return TRUE;
}
extern BOOL  EnQueue(LHandle q,void * elem)
{/*插入元素elem为新的队尾元素*/
NHandle temp ;
assert(NULL !=q);
assert(NULL !=elem);
temp = AllocNode(q,elem);
/**/
if((q->size)++ != 0){/*长度加1*/
q->rear->next = temp;
q->rear = q->rear->next;
}
else{
q->front=q->rear=temp;
}
return TRUE;
}
extern BOOL DeQueue(LHandle q,void * elem)
{/*如elem不为空,则将删除后的头结点值赋值给elem,返回TRUE*/
NHandle temp;
assert(NULL !=q);
if(0==q->size)return FALSE;
temp= q->front->next;/*新的队头*/

if(NULL!=elem)/*拷贝到elem*/
memcpy(elem,q->front,q->type);
FreeNode( &(q->front));
if( (q->size)-- !=1){
q->front = temp;
}
else{
q->front =q->rear =NULL;
}
return TRUE;
}
extern BOOL ClearQueue(LHandle q)
{/*清空*/
assert(NULL !=q);
while(0 !=q->size)
DeQueue(q,NULL);
return TRUE;
}
extern BOOL DestroyQueue(LHandle * q)
{/*销毁*/
assert(q);
assert(*q);
ClearQueue(*q);
free(*q);
return TRUE;
}

• 本文已收录于以下专栏：

## C#-—体验泛型队列

/**烟台大学计算机学院学生 *All right reserved. *文件名称:C#-—体验泛型队列 *作者：杨飞 ...
• u012370105
• 2014年10月16日 14:48
• 463

## 一个通用的队列类，和C++STL中的Queue一样

C++中的队列，模板队列，实现了入队，出队，查询大小等功能。用模板实现的。...
• nyist327
• 2014年09月25日 14:11
• 1052

## C#泛型集合类

C#提供了许多常用的集合类，比较常用的有以下几个： List:可以像数组一样按索引访问的列表，也提供其他的方法进行搜索和排序。 创建List时无需指定大小，它随着元素的添加，可以自动增加，保证能够...
• bullzerone
• 2017年05月28日 17:34
• 207

## 队列，泛型

package 队列; public class List { //新建一个数组 private Object old []=new Object [0] ; /** * 在数...
• dahe5
• 2013年02月27日 22:33
• 144

## 数据结构--队列-泛型OC&C++混编-泛型编程

• lc_1581835288
• 2016年01月02日 20:50
• 1454

## 泛型队列实现文件C++

// queue.cpp template void Queue ::m_copyElement (const Queue &queue) { QueueItem * scan = qu...
• 2011年09月25日 17:45
• 774

## java的数组队列和泛型

• u010376380
• 2015年06月14日 22:33
• 1071

## 关于泛型程序设计和c++标准模板库

1. 泛型程序设计 所谓泛型程序，就是不依赖与某种特定的数据结构的程序。 前面所学的模板，就是泛型程序设计中极其有用的工具。设计的主要思想就是将算法从特定的数据结构里抽象出来。 概...
• theGloves
• 2016年12月09日 21:14
• 199

## 在Delphi中实现类型安全的容器,Delphi泛型库DGL引介(提供源码下载)

在Delphi中实现类型安全的容器                Delphi泛型库--DGL(The Delphi Generic Library)简介       ...
• paulchenbo
• 2007年07月06日 11:34
• 584

## C#—Stack和Queue泛型使用

Stack泛型 /* * 引入命名空间System.Collections。使用.Net提供的泛型类Stack，实现字符串或者数字的反序。 * */ using System; usin...
• LY_624
• 2016年04月15日 17:09
• 1033

举报原因： 您举报文章：[库]泛型队列 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)