/*
* Copyright (c) 2017,烟台大学计算机学院
* All right reserved.
* 文件名称:main.cpp
* 作者: 王华慧
* 完成日期:2017年10月24日
* 版本号:v1.0
*
* 问题描述:建立顺序环形队列算法库
* 输入描述:标准函数输入
* 程序输出:标准函数输出
*/
sqqueue.h 存放函数头文件
#pragma once
#ifndef SQQUEUE_H_INCLUDED
#define SQQUEUE_H_INCLUDED
#define MaxSize 5
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int front, rear; /*队首和队尾指针*/
} SqQueue;
void InitQueue(SqQueue *&q); //初始化顺序环形队列
void DestroyQueue(SqQueue *&q); //销毁顺序环形队列
bool QueueEmpty(SqQueue *q); //判断顺序环形队列是否为空
int QueueLength(SqQueue *q); //返回队列中元素个数,也称队列长度
bool enQueue(SqQueue *&q, ElemType e); //进队
bool deQueue(SqQueue *&q, ElemType &e); //出队
#endif // SQQUEUE_H_INCLUDED
sqqueue.cpp 定义函数存放
#include <stdio.h> #include <malloc.h> #include "sqqueue.h" void InitQueue(SqQueue *&q) //初始化顺序环形队列 { q = (SqQueue *)malloc(sizeof(SqQueue)); q->front = q->rear = 0; } void DestroyQueue(SqQueue *&q) //销毁顺序环形队列 { free(q); } bool QueueEmpty(SqQueue *q) //判断顺序环形队列是否为空 { return(q->front == q->rear); } int QueueLength(SqQueue *q) //返回队列中元素个数,也称队列长度 { return (q->rear - q->front + MaxSize) % MaxSize; } bool enQueue(SqQueue *&q, ElemType e) //进队 { if ((q->rear + 1) % MaxSize == q->front) //队满上溢出 return false; q->rear = (q->rear + 1) % MaxSize; q->data[q->rear] = e; return true; } bool deQueue(SqQueue *&q, ElemType &e) //出队 { if (q->front == q->rear) //队空下溢出 return false; q->front = (q->front + 1) % MaxSize; e = q->data[q->front]; return true;
主函数main.cpp
运行结果#include <stdio.h> #include "sqqueue.h" #include <iostream> int 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"); DestroyQueue(q); system("pause"); return 0; }
区分和栈和队列顺序表的建立,有相同之处也有不同的地方,还是需要好好学习,个人思路上还是有点跟不上