欢迎来到天天文库
浏览记录
ID:57189099
大小:16.00 KB
页数:5页
时间:2020-08-05
《队列顺序存储操作的6种算法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#include #include typedef int elemType;/************************************************************************//* 以下是关于队列顺序存储操作的6种算法 *//************************************************************************/struct queue{ elem
2、Type *queue; /* 指向存储队列的数组空间 */ int front, rear, len; /* 队首指针(下标),队尾指针(下标),队列长度变量 */ int maxSize; /* queue数组长度 */};void againMalloc(struct queue *q){ /* 空间扩展为原来的2倍,原内容被自动拷贝到p所指向的存储空间中 */ elemType *p; p = realloc(q->queue, 2 * q->maxSize * sizeof(elemT
3、ype)); /* 动态存储空间分配,若失败则退出运行 */ if(!p){ printf("空间分配失败!"); exit(1); } q->queue = p; /* 使queue指向新的队列空间 */ /* 把原队列的尾部内容后移maxSize个位置 */ if(q->rear != q->maxSize -1){ int i; for(i = 0; i <= q->rear; i++){ q->queue[i+q->maxSize]
4、 = q->queue[i]; } q->rear += q->maxSize; /* 队尾指针后移maxSize个位置 */ } q->maxSize = 2 * q->maxSize; /* 把队列空间大小修改为新的长度 */ return;}/* 1.初始化队列 */void initQueue(struct queue *q, int ms){ /* 检查ms是否有效,若无效则退出运行 */ if(ms <= 0){ printf("ms值非法!");
5、exit(1); } q->maxSize = ms; /* 置队列空间大小为ms */ /* 动态存储空间分配,若失败则退出运行 */ q->queue = malloc(ms * sizeof(elemType)); if(!q->queue){ printf("内存空间分配失败!"); exit(1); } q->front = q->rear = 0; /* 初始置队列为空 */ return;}/* 2.向队列中插入元素x */void enQueue(
6、struct queue *q, elemType x){ /* 当队列满时进行动态生分配 */ if((q->rear + 1) % q->maxSize == q->front){ againMalloc(q); } q->rear = (q->rear + 1) % q->maxSize; /* 求出队尾的下一个位置 */ q->queue[q->rear] = x; /* 把x的值赋给新的队尾 */ return;}/* 3.从队列中删除元素并返回
7、*/elemType outQueue(struct queue *q){ /* 若队列为空则终止运行 */ if(q->front == q->rear){ printf("队列为空,无法删除!"); exit(1); } q->front = (q->front +1) % q->maxSize; /* 使队首指针指向下一个位置 */ return q->queue[q->front]; /* 返回队首元素 */}/* 4.读取队首元素,不改变队列状
此文档下载收益归作者所有