C语言实现顺序存储结构的循环链表
2016-12-25 17:52
429 查看
SqQueue.h
SqQueue.cpp
////////////////////////////////////////////////////////////////// //用顺序存储结构表示的循环队列 ///////////////////////////////////////////////////////////////// #ifndef _SQQUEUE_H_ #define _SQQUEUE_H_ #define MAXQSIZE 100 //最大队列长度 typedef int QElemType; typedef struct { QElemType *base; //初始化的动态分配存储空间 int front; //头指针,若队列不空,指向队列头元素 int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置 }SqQueue; bool InitQueue(SqQueue *Q); //初始化一个队列 bool DestroyQueue(SqQueue *Q); //销毁一个队列 bool ClearQueue(SqQueue *Q); //清空一个队列 bool QueueEmpty(SqQueue Q); //判断队列是否为空 unsigned int QueueLength(SqQueue Q); //返回队列的长度 bool GetHead(SqQueue Q, QElemType *e); //获取队列头元素 bool EnQueue(SqQueue *Q, QElemType e); //在队列中插入元素 bool DeQueue(SqQueue *Q, QElemType *e); //在队列中删除元素 #endif
SqQueue.cpp
#include <stdio.h> #include <stdlib.h> #include "SqQueue.h" //构造一个新队列 bool InitQueue(SqQueue *Q) { Q->base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType)); if(NULL == Q->base) { printf("error malloc!"); return false; } Q->front = Q->rear = 0; return true; } //销毁一个队列 bool DestroyQueue(SqQueue *Q) { if(NULL == Q->base) { printf("Invalid queue!"); return false; } free(Q->base); Q->base = NULL; Q->front = Q->rear = 0; return true; } //清空一个队列 bool ClearQueue(SqQueue *Q) { if(NULL == Q->base) { printf("Invalid queue!"); return false; } Q->front = Q->rear = 0; return true; } //判断队列是否为空 bool QueueEmpty(SqQueue Q) { if(NULL == Q.base) { printf("Invalid queue!"); return false; } return (Q.front == Q.rear ? true : false); } //返回队列中元素的个数 unsigned int QueueLength(SqQueue Q) { if(NULL == Q.base) { printf("Invalid queue!"); return 0; } return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE; } //获取队列头元素 bool GetHead(SqQueue Q, QElemType *e) { if(NULL == Q.base) { printf("Invalid queue!"); return false; } *e = Q.base[Q.front]; return true; } //在队列中插入元素 bool EnQueue(SqQueue *Q, QElemType e) { if(NULL == Q->base) { printf("Invalid queue!"); return false; } if((Q->rear + 1) % MAXQSIZE == Q->front) { printf("Full queue!"); return false; } Q->base[Q->rear++] = e; if(Q->rear == MAXQSIZE) Q->rear = 0; //也可以写成下式 /* Q->base[Q->rear] = e; Q->rear = (Q->rear + 1) % MAXQSIZE;*/ return true; } //在队列中删除元素 bool DeQueue(SqQueue *Q, QElemType *e) { if(QueueEmpty(*Q)) return false; *e = Q->base[Q->front++]; if(Q->front == MAXQSIZE) Q->front = 0; //也可以写成下式 /* *e = Q->base[Q->front]; Q->front = (Q->front + 1) % MAXQSIZE;*/ return true; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- C#数据结构之顺序表(SeqList)实例详解
- Lua和C语言的交互详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- 浅谈C语言转义字符和格式控制符
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- 利用C语言的Cairo图形库绘制太极图实例教程