Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1454555
  • 博文数量: 181
  • 博客积分: 3308
  • 博客等级: 中校
  • 技术积分: 2227
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-03 12:03
个人简介

我是zoro

文章分类

全部博文(181)

文章存档

2015年(1)

2013年(35)

2012年(39)

2011年(50)

2010年(56)

分类: LINUX

2011-07-07 15:20:36

 一个较巧妙的办法是将顺序队列臆造为一个环状的空间,如图3.13所示,称之为循环队列从上述分析可见,如果用户的应用程序中设有循环队列,则必须为它设定一个最大队列长度;若用户无法估计所用队列的最大长度,则宜采用链队列。循环队列类型的模块说明如下:

//———循环队列—队列的顺序存储结构———
#define MAXQSIZE 100 //最大队列长度
typedef struct {
    QElemType *base; //初始化的动态分配存储空间
    int front; //头指针,若队列不空,指向队列头元素
    int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置
}SqQueue ;

图 3.13 循环队列

//循环队列的基本操作的算法描述
Status InitQueue (SqQueue &Q){ //构造一个空队列Q
    Q.base=( QElemType)malloc(MAXQSIZE*sizeof(QElemType));
    if(!Q.base)exit(OVERFLOW); //存储分配失败
    Q.front = Q.rear = 0;   return OK;}

Int QueueLength (SqQueue Q){ //返回Q的元素个数,即队列的长度
    return(Q.rear – Q.front + MAXQSIZE) % MAXQSIZE; }

Status EnQueue (SqQueue &Q, QElemType e){ //插入元素e为Q的新的队尾元素
    if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR; //队列满
    Q.base[Q.rear] = e;  Q.rear = (Q.rear+1) % MAXQSIZE;     return OK; }

Status DeQueue (SqQueue &Q,QElemType &e){
//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR
    if (Q.Front = = Q.rear) return ERROR;
    e = Q.base[ Q.front ];   Q.front = (Q.front+1)%MAXQSIZE; return OK;}

原文:
阅读(1885) | 评论(0) | 转发(0) |
0

上一篇:linux内核多线程

下一篇:inode.c

给主人留下些什么吧!~~