文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>抽象数据类型(ADT)--队列的实现

抽象数据类型(ADT)--队列的实现

时间:2010-08-01  来源:chengbin_liu

/* ************************************************************************
 *       Filename:  queue.h
 *    Description:  chengbin_liu
 *        Version:  1.0
 *        Created:  2010年08月01日 15时06分09秒
 *       Revision:  none
 *       Compiler:  gcc
 *         Author:  YOUR NAME (),
 *        Company: 
 * ************************************************************************/
#ifndef _QUEUE_H_
#define _QUEUE_H_
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 10
typedef struct item
{
 int gumption;
 int charisma;
}Item;
typedef struct node
{
 Item item;
 struct node *next;
}Node;
typedef struct queue
{
 Node *front;
 Node *rear;
 int item;
}Queue;
void InitializeQueue(Queue *pq);
bool QueueIsFull(const Queue *pq);
bool QueueIsEmpty(const Queue *pq);
int QueueItemCount(const Queue *pq);
bool DeQueue(Item *pitem,Queue *pq);//delete item from queue.
bool EnQueue(Item item,Queue *pq);//insert item to queue.
void EnptyQueue(Queue *pq);
#endif
//===================================================================
/* ************************************************************************
 *       Filename:  queue.c
 *    Description: chengbin_liu
 *        Version:  1.0
 *        Created:  2010年08月01日 15时15分04秒
 *       Revision:  none
 *       Compiler:  gcc
 *         Author:  YOUR NAME (),
 *        Company: 
 * ************************************************************************/
#include "queue.h" static void CopyToNode(Item item, Node *pn);
static void CopyToItem(Node *pn,Item *pi);
void InitializeQueue(Queue *pq)
{
 pq->front=pq->rear=NULL;
 pq->item=0;
}
bool QueueIsFull(const Queue *pq)
{
 return pq->item==MAX;
}
bool QueueIsEmpty(const Queue *pq)
{
 return pq->item==0;
}
int QueueItemCount(const Queue *pq)
{
 return pq->item;
}
bool EnQueue(Item item,Queue *pq)
{
 Node *pnew;
 if(QueueIsFull(pq))
  return false;
 pnew=(Node *)malloc(sizeof(Node));
 if(pnew==NULL)
 {
  fprintf(stderr,"unable to allocate memory!\n");
  exit(1);
 }
 CopyToNode(item,pnew);
 pnew->next=NULL;
 if(QueueIsEmpty(pq))
  pq->front=pnew;
 else
  pq->rear->next=pnew;
 pq->rear=pnew;
 pq->item++;
 return true;
}
bool DeQueue(Item *pitem,Queue *pq)
{
 Node *pt;
 if(QueueIsEmpty(pq))
  return false;
 CopyToItem(pq->front,pitem);
 pt=pq->front;
 pq->front=pq->front->next;
 free(pt);
 pq->item--;
 if(pq->item==0)
  pq->rear=NULL;
 return true;
}
void EmptyTheQueue(Queue *pq)
{
 Item dummy;
 while(!QueueIsEmpty(pq))
  DeQueue(&dummy,pq);
}
static void CopyToNode(Item item,Node *pn)
{
 pn->item=item;
}
static void CopyToItem(Node *pn,Item *pi)
{
 *pi=pn->item;
}
//==============================================================
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载