[库]泛型队列

原创 2004年10月05日 21:16:00

/*
  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

typedef struct Link * LHandle;

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;

typedef struct Link{
    NHandle  front;/*头指针*/
    NHandle  rear ;/*尾指针*/
    int      size ;/*长度*/
    size_t   type ;
}Link , *LHandle;
/*
内部函数
*/
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)
{/*构造*/
 LHandle temp = (LHandle)malloc(sizeof(Link));
 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
  • u012370105
  • 2014年10月16日 14:48
  • 463

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

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

C#泛型集合类

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

队列,泛型

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

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

在这篇文章里, 您可以学习到: 数据结构简介数据结构的逻辑结构和物理结构队列OC和C++在Xcode中的混编泛型编程思想泛型编程实现循环队列和链表队列博客中使用的图片均来自网络 一.数...
  • lc_1581835288
  • lc_1581835288
  • 2016年01月02日 20:50
  • 1454

泛型队列实现文件C++

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

java的数组队列和泛型

在java程序设计中,经常需要用到数组,数组的存储和读取速度是数据结构中最快的一种。但是,在稍为复杂的程序设计中,我们就会发现数组的局限性,其局限性有一部分是其优点所带来的。例如:数组的长度是固定的,...
  • u010376380
  • u010376380
  • 2015年06月14日 22:33
  • 1071

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

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

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

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

C#—Stack和Queue泛型使用

Stack泛型 /* * 引入命名空间System.Collections。使用.Net提供的泛型类Stack,实现字符串或者数字的反序。 * */ using System; usin...
  • LY_624
  • LY_624
  • 2016年04月15日 17:09
  • 1033
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[库]泛型队列
举报原因:
原因补充:

(最多只允许输入30个字)