您的位置:首页 > 其它

实现顺序队列各种基本运算的算法

2013-01-27 15:06 477 查看
/*algo3-3.cpp*/

#include<stdio.h>

#include<malloc.h>

#define MaxSize 5

typedef char ElemType;

typedef struct

{

ElemType elem[MaxSize];

int front,rear;/*队首和队尾指针*/

}SqQueue;

void InitQueue(SqQueue * &q)/*初始化队列q*/

{

q=(SqQueue *)malloc(sizeof(SqQueue));

q->front=q->rear=0;

}

void ClearQueue(SqQueue * &q)/*释放队列q*/

{

free(q);

}

int QueueEmpty(SqQueue *q)/*判断队列q是否为空*/

{

return(q->front==q->rear);

}

int QueueLength(SqQueue *q)/*求队列q的长度*/

{

return(q->rear-q->front+MaxSize)%MaxSize;

}

int enQueue(SqQueue * &q,ElemType e)/*进队一个元素e*/

{

if((q->rear+1)%MaxSize==q->front)/*队满*/

return 0;

q->rear=(q->rear+1)%MaxSize;

q->elem[q->rear]=e;

return 1;

}

int deQueue(SqQueue * &q,ElemType &e)/*出队一个元素*/

{

if(q->front==q->rear)/*队空*/

return 0;

q->front=(q->front+1)%MaxSize;

e=q->elem[q->front];

return 1;

}

/*exp3-3.cpp*/

#include<stdio.h>

#include<malloc.h>

#define MaxSize 5

typedef char ElemType;

typedef struct

{

ElemType elem[MaxSize];

int front,rear;/*队首和队尾指针*/

}SqQueue;

extern void InitQueue(SqQueue * &q);

extern void ClearQueue(SqQueue * &q);

extern int QueueEmpty(SqQueue *q);

extern int QueueLength(SqQueue *q);

extern int enQueue(SqQueue * &q,ElemType e);

extern int deQueue(SqQueue * &q,ElemType &e);

void main()

{

ElemType e;

SqQueue *q;

printf("(1)初始化队列q\n");

InitQueue(q);

printf("(2)依次进队列元素a,b,c\n");

if(enQueue(q,'a')==0) printf("队满,不能进队\n");

if(enQueue(q,'b')==0) printf("队满,不能进队\n");

if(enQueue(q,'c')==0) printf("队满,不能进队\n");

printf("(3)队列为%s\n",(QueueEmpty(q)?"空":" 非空"));

if(deQueue(q,e)==0)

printf("队空,不能出队\n");

else

printf("(4)出队一个元素%c\n",e);

printf("(5)队列q的元素个数:%d\n",QueueLength(q));

printf("(6)依次进队列元素d,e,f\n");

if(enQueue(q,'d')==0) printf("队满,不能进队\n");

if(enQueue(q,'e')==0) printf("队满,不能进队\n");

if(enQueue(q,'f')==0) printf("队满,不能进队\n");

printf("(7)队列q的元素个数:%d\n",QueueLength(q));

printf("(8)出队列序列:");

while(!QueueEmpty(q))

{

deQueue(q,e);

printf("%c",e);

}

printf("\n");

printf("(9)释放队列\n");

ClearQueue(q);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: