/*
   *第七周--数据结构--队列数组 
   *Copyright (c) 2015 烟台大学计算机与控制工程学院
   *All right reserved.
   *文件名称:liqueue

*writer:罗海员

*date:2015年10月28日
   *版本:V1.0.2
   *操作系统:windows7
   *运行环境:VC6.0
   *问题描述:创建10个队列,分别编号为0-9(处理为队列数组,编号即下标)。
             输入若干个正整数,以数字0作为结束。设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中。
             最后输出所有的非空队列。
   *输入描述:任意输入,以0为止。

*算法库包括三个文件:
     头文件:liqueue.h     包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;
     源文件:main.cpp      包含实现各种算法的函数的定义
       函数运算:liqueue.cpp 包含各类函数运算
   *程序输出:
*/

#include"liqueue.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;
}
</span>
#include "liqueue.h"
int main()
{
int i, a;
LiQueue *qu[N]; //定义队列指针数组
for (i=0; i<N; i++)
InitQueue(qu[i]);       //初始化队列
//为队列中加入值
printf("输入若干正整数,以0结束: ");
scanf("%d", &a);
while(a)
{
enQueue(qu[a%10], a);
scanf("%d", &a);
}
//输出各个队列
printf("按个位数整理到各个队列中后,各队列出队的结果是: \n");
for (i=0; i<N; i++)
{
printf("qu[%d]: ", i);
while(!QueueEmpty(qu[i]))
{
deQueue(qu[i], a);
printf("%d ", a);
}
printf("\n");
}
//销毁各个队列
for (i=0; i<N; i++)
DestroyQueue(qu[i]);
return 0;
}
#ifndef LIQUEUE_H_INCLUDED
#define LIQUEUE_H_INCLUDED
#include <stdio.h>
#include <malloc.h>
#define N 10
typedef int ElemType;
typedef struct qnode
{
ElemType data;
struct qnode *next;
} QNode;        //链队数据结点类型定义
typedef struct
{
QNode *front;
QNode *rear;
} LiQueue;          //链队类型定义
void InitQueue(LiQueue *&q);  //初始化链队
void DestroyQueue(LiQueue *&q);  //销毁链队
bool QueueEmpty(LiQueue *q);  //判断链队是否为空
int QueueLength(LiQueue *q);  //返回队列中数据元素个数
void enQueue(LiQueue *&q,ElemType e);  //入队
bool deQueue(LiQueue *&q,ElemType &e);   //出队
#endif // LIQUEUE_H_INCLUDED</span>
/*
总结:1.判断链队是否为空       一直伴随着我们
2.释放链队节点占用空间   亦不容小觑
3.入队和出队的程序为本片的中心
*/

输出结果如下:

第七周--数据结构--队列数组相关推荐

  1. 数据结构-队列-数组队列

    自定义队列 文章目录 自定义队列 数组队列 简述: 数组环形队列 数组队列 简述: 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大 ...

  2. 数据结构--队列(数组)的一种实现

    单向队列(数组实现) package mainimport ("errors""fmt""os" )//队列是一种重要的数据结构,应用也相对 ...

  3. 第七周:字符串 + 数组 + 指针

    1.字符串中的字符删除 题目: 分别用字符数组或字符指针做函数参数,在字符串中删除与某字符相同的字符. void Delete1(char s[ ], char ch); void Delete2(c ...

  4. 数据结构上机实践第七周项目4 - 队列数组

    /* copyright (t) 2017,烟台大学计算机学院 *All rights reserved. *文件名称:1.cpp *作者:田长航 *完成日期:2016年10月14日 *版本号:v1. ...

  5. 第七周 项目四-队列数组

    /* Copyright (c)2017,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第7周项目项目4 - 队列数组.cpp 作 者:孙仁圆 完成日期:2017年 ...

  6. 第七周项目四—队列数组

    /*      Copyright (c)2015,烟台大学计算机与控制工程学院      All rights reserved.      文件名称:第7周项目项目4 - 队列数组.cpp     ...

  7. 第七周实践项目4 队列数组

    创建10个队列,分别编号为0-9(处理为队列数组,编号即下标).输入若干个正整数,以数字0作为结束.设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中.最后输出所有的非空队列. 要求将 ...

  8. 20172316 2017-2018-2《程序设计与数据结构》第七周学习总结

    20172316 2017-2018-2<程序设计与数据结构>第七周学习总结 教材学习内容总结 继承 定义:继承就是从现有类派生新类的过程. 继承具有单向性(马都是哺乳动物,哺乳动物不都是 ...

  9. 20162329张旭升 2016-2017-2 《程序设计与数据结构》第七周学习总结

    20162329张旭升 2016-2017-2 <程序设计与数据结构>第七周学习总结 教材学习内容总结 通过继承实现多态:若两个类是is-a关系,将子类对象向上转型为父类后该变量就可以实现 ...

最新文章

  1. day 01 ————立志运维的第一天开始,承若书!
  2. [codeigniter]CI中使用pChart绘制图表,已测通过
  3. Spring+Hibernate的典型配置
  4. 世界上最奇特的国界线,万万没想到...
  5. 推荐系统(4)-逻辑回归LR、POLY2、FM、FFM
  6. JMeter如何和Charles进行接口测试
  7. Windows 与 Linux 通过Xshell 文件互传
  8. Customer Exit
  9. 真希望能夠統一一下接口
  10. oracle安装蓝屏_Windows下安装ORACLE RAC蓝屏无限重启
  11. 【控制工程】与控制工程密切相关的拉普拉斯变换
  12. C语言中将字符串转换为数字
  13. C#读写西门子PLC数据
  14. swift跳转到故事版的界面
  15. 用Python+matplotlib足球运动员的射门数据可视化(绘制散点图)
  16. 使用python将txt格式的数据转换为csv格式,读取csv数据前几行
  17. 计算机网络谢希仁第七版课后习题答案(第三章)
  18. 轮训、长轮训、长连接
  19. Word在试图打开文件时遇到错误,请尝试下列方法:检查文档或驱动器的文件权限 确保有足够的内存和磁盘空间 用文本恢器打开文件
  20. Cesium空间数据的管理

热门文章

  1. html css学习笔记~ 基础知识和页面显示的四个区域内容及display:flex 等常用的一些命令(手画)
  2. 如何选择指针中置空?NULL, nullptr, 0?
  3. 金融行业 | 电子银行系统性能优化解决方案 1
  4. 【Microsoft Azure 的1024种玩法】五十. 通过Azure文件共享将Azure File 挂载到本地机器实现文件实时共享
  5. H5+CSS实现三级菜单(包括水平、垂直菜单和网页架构)
  6. Python: SQLAlchemy 处理 PostgreSQL on conflict
  7. heroku部署nodejs+express
  8. 我与小娜(13):LIGO是什么组织?
  9. char型变量声明java_java中变量的声明和变量的类型
  10. SHP转换为SLPK