学习笔记------数据结构(C语言版) 队列的顺序存储/循环队列
来源:互联网 发布:域名需要几天 编辑:程序博客网 时间:2024/05/18 12:03
//SqQueue.cpp
#include"predefined.h"#include"SqQueue.h"Status InitQueue (SqQueue *Q)//构造一个空队列Q{(*Q).base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));if(!(*Q).base)exit(OVERFLOW);(*Q).front=(*Q).rear=0;return OK;}Status DestroyQueue (SqQueue *Q)//销毁队列Q{free((*Q).base);(*Q).base=NULL;(*Q).front=(*Q).rear=0;return OK;}Status ClearQueue (SqQueue *Q)//清空队列Q{(*Q).front=(*Q).rear=0;return OK;}Status QueueEmpty(SqQueue Q)//若Q为空队列,返回TRUE;否则返回FALSE{if(Q.front==Q.rear)return TRUE;elsereturn FALSE;}int QueueLength(SqQueue Q)//返回Q的元素个数,即队列的长度{return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;}Status GetHead(SqQueue Q,QElemType *e)//用e返回Q的队头元素{if(QueueEmpty(Q))return ERROR;*e=Q.base[Q.front];return OK;}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).rear==(*Q).front)return ERROR;*e=(*Q).base[(*Q).front];(*Q).front=((*Q).front+1)%MAXQSIZE;return OK;}void QueueTraverse(SqQueue Q,void (*visit)(QElemType e))//从队头到队尾依次对每个元素调用visit{int i;QElemType e;i=Q.front;while(i!=Q.rear){e=Q.base[i];visit(e);i=(i+1)%MAXQSIZE;}}void PrintElem(QElemType e) { printf("%d ",e); }
//main.cpp
#include"predefined.h"#include"SqQueue.h"int main(){SqQueue Q; Status s; int i; QElemType e; printf("Function 1\n★函数Status InitQueue (SqQueue *Q)测试...\n"); s=InitQueue(&Q); printf("▲初始化循环队列Q: %d (0:失败 1:成功)\n\n",s); printf("Function 2\n★函数Status QueueEmpty(SqQueue Q)测试...\n"); QueueEmpty(Q)?printf("▲循环队列Q为空!!!\n\n"):printf("▲循环队列Q非空!!!\n\n"); printf("Function 3\n★函数Status EnQueue(SqQueue *Q,QElemType e)测试...\n"); for(i=1;i<6;i++) { printf("▲元素\"%2d\"入队\n",2*i); EnQueue(&Q,2*i); printf("▲累计第%d元素\n",QueueLength(Q)); } printf("\n"); printf("Function 4\n★函数void QueueTraverse(SqQueue Q,void (*visit)(QElemType e))测试...\n"); printf("▲队列Q中的元素为:Q={"); QueueTraverse(Q,PrintElem); printf("}\n\n"); printf("Function 5\n★函数Status DeQueue(SqQueue *Q,QElemType *e)测试...\n"); DeQueue(&Q,&e); printf("▲队列Q队头元素\"%2d\"出队\n",e); printf("▲队列Q中的元素为:Q={"); QueueTraverse(Q,PrintElem); printf("}\n\n"); printf("Function 6\n★函数int QueueLength(SqQueue Q)测试...\n"); i=QueueLength(Q); printf("▲队列Q的长度为%d\n\n",i); printf("Function 7\n★函数Status GetHead(SqQueue Q,QElemType *e)测试...\n"); GetHead(Q,&e); printf("▲队列Q队头元素\"%2d\"\n\n",e); printf("Function 8\n★函数Status ClearQueue (SqQueue *Q)测试...\n"); printf("▲置空前:"); QueueEmpty(Q)?printf("▲循环队列Q为空!!!\n"):printf("▲循环队列Q非空!!!\n"); ClearQueue(&Q); printf("▲置空后:"); QueueEmpty(Q)?printf("▲循环队列Q为空!!!\n\n"):printf("▲循环队列Q非空!!!\n\n"); printf("Function 9\n★函数Status DestroyQueue (SqQueue *Q)测试...\n"); printf("▲销毁前:"); Q.base?printf("▲循环队列Q存在!!!\n"):printf("▲循环队列Q不存在!!!\n"); DestroyQueue(&Q); printf("▲销毁后:"); Q.base?printf("▲循环队列Q存在!!!\n\n"):printf("▲循环队列Q不存在!!!\n\n"); return 0;}
0 0
- 学习笔记------数据结构(C语言版) 队列的顺序存储/循环队列
- 学习笔记------数据结构(C语言版)队列链式存储
- 学习笔记------数据结构(C语言版)栈的顺序存储
- 学习笔记------数据结构(C语言版)数组的顺序存储
- 数据结构-循环队列顺序存储
- 数据结构---队列---循环队列---顺序存储
- 数据结构学习笔记 --- 队列(循环队列-队列的顺序表示和实现)
- 数据结构学习笔记 --- 队列(循环队列-队列的顺序表示和实现)
- 数据结构:队列的顺序存储结构(循环队列)
- 数据结构:队列的顺序存储结构(循环队列)
- 循环队列(C语言版)
- 数据结构-队列(C语言版)
- 《数据结构(C语言版)》- 队列
- 学习笔记------数据结构(C语言版) 线性表顺序存储
- 数据结构学习之循环队列(顺序存储)
- 《数据结构》队列的顺序表示--循环队列
- 队列的顺序存储结构---循环队列
- 队列的顺序存储结构(循环队列)
- Hibernate中inverse="true"的理解
- NYOJ-102-次方求模
- ML Methods Classification
- 1007. 素数对猜想
- Paltform总线与其它总线框架的关系探究
- 学习笔记------数据结构(C语言版) 队列的顺序存储/循环队列
- 配对堆
- POJ3281 Dining(最大流)
- 导航控制器 UINavigationController
- 【分享】GEARS of DRAGOON 1+2【日文硬盘版】[带全CG存档&攻略+SSG修改+打开存档补丁]
- VB6中ByRef 参数类型不正确的处理方法
- NOJ 基础入门题 2016.2.6
- 蟠桃记
- C# 基础加强(五) 抽象类、抽象方法