第七周 项目2 建立链队算法库
2015-10-14 18:43
267 查看
<pre name="code" class="cpp"><pre name="code" class="cpp">/* * 烟台大学计算机与控制工程学院 *文件名称:sqqueue.h *作 者:王旭 *完成日期:2015年10月13日 *版 本 号:v1.0 * *问题描述:定义链队存储结构,实现其基本运算,并完成测试。。 * 采用多文件的形式。 * *输入描述:定义链队存储结构,实现其基本运算,并完成测试。 *程序输出:进队、出队情况以及元素个数。 */
程序代码:
sqqueue.h
#include <stdio.h> #define MaxSize 50 typedef int 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); //出队
mian.cpp
#include <iostream> using namespace std; #include "sqqueue.h" int main() { ElemType e; LiQueue *q; InitQueue(q); cout<<"初始化队列完成"<<endl; //初始化队列 cout<<"依次进队列元素a,b,c"<<endl; enQueue(q,'a'); enQueue(q,'b'); enQueue(q,'c'); cout<<"判断队列是否为空:"; if(deQueue(q,e)==0) cout<<"队列为空"<<endl; if(deQueue(q,e)==1) cout<<"队列不为空"<<endl; if (QueueEmpty(q)==1) cout<<"队空,不能出队"<<endl; else { deQueue(q,e); cout<<"出队一个元素"<<e<<endl; } cout<<"队列q的元素个数:"<<QueueLength(q)<<endl; cout<<"依次进队列元素d,e,f"<<endl;//进队 enQueue(q,'a'); enQueue(q,'b'); enQueue(q,'c'); cout<<"队列q的元素个数:"<<QueueLength(q)<<endl; cout<<"出队列序列:"; while (deQueue(q,e)!=0) { deQueue(q,e); printf("%c ",e); } cout<<endl; cout<<"释放队列"<<endl; DestroyQueue(q); cout<<"判断队列是否为空:"; if(deQueue(q,e)==0) cout<<"队列为空"<<endl; if(deQueue(q,e)==1) cout<<"队列不为空"<<endl; return 0; }
sqqueue.cpp
#include <stdio.h> #include <malloc.h> #include "sqqueue.h" void InitQueue(LiQueue *&q) //初始化链队 { q=(LiQueue *)malloc(sizeof(LiQueue)); q->front=q->rear=NULL; } void DestroyQueue(LiQueue *&q) //销毁链队 { QNode *p=q->front,*r; //p指向队头数据节点 if (p!=NULL) //释放数据节点占用空间 { r=p->next; while (r!=NULL) { free(p); p=r; r=p->next; } } free(p); free(q); //释放链队节点占用空间 } bool QueueEmpty(LiQueue *q) //判断链队是否为空 { return(q->rear==NULL); } int QueueLength(LiQueue *q) //返回队列中数据元素个数 { int n=0; QNode *p=q->front; while (p!=NULL) { n++; p=p->next; } return(n); } void enQueue(LiQueue *&q,ElemType e) //入队 { QNode *p; p=(QNode *)malloc(sizeof(QNode)); p->data=e; p->next=NULL; if (q->rear==NULL) //若链队为空,则新节点是队首节点又是队尾节点 q->front=q->rear=p; else { q->rear->next=p; //将*p节点链到队尾,并将rear指向它 q->rear=p; } } bool deQueue(LiQueue *&q,ElemType &e) //出队 { QNode *t; if (q->rear==NULL) //队列为空 return false; t=q->front; //t指向第一个数据节点 if (q->front==q->rear) //队列中只有一个节点时 q->front=q->rear=NULL; else //队列中有多个节点时 q->front=q->front->next; e=t->data; free(t); return true; }
#include <stdio.h> #define MaxSize 50 typedef int 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); //出队
相关文章推荐
- framework的native文件夹下的cpp文件里使用property的过程
- Jquery中$.ajax $.post load用法与区别
- Android属性动画之ValueAnimator
- java线程池
- 距离详解Linux下的UDP方式通讯
- android中EditText有光标不弹出软键盘处理(转)
- python脚本控制鼠标和键盘-实例
- 集合 --- ArrayList
- Linux下lzop命令安装
- java调用html模板发送html内容的邮件
- STL之map/multimap关联式容器学习
- JavaScript中字体浮动的简单演示实例
- 【转载】 Visual Studio插入自定义代码段
- 数据库-关系代数-对除法的理解
- Java线程面试题 Top 50
- git使用总结
- C++11学习总线及相关资料----悲惨了好多天,奉献了!
- 如果你刚第一次用itellingj编写scala,并且发现运行不了main方法
- 我的EF功能
- 删除word文档中表格后的空行