code1:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h> #define MAXSIZE 65533 #define bool int
#define true 1
#define false 0 typedef int KeyType; typedef struct queue
{
KeyType * key;
int front;
int rear;
int count;
}Queue; /* 定义所有函数 */
Queue * CreateQueue();
bool QueueIsEmpty();
bool QueueIsFull();
int QueueItemCount();
bool QueueAdd();
bool QueueRemove();
KeyType GetQueueFront();
KeyType GetQueueRear();
void TraverseQueue();
bool ClearQueue();
void DeleteQueue(); //建立队列
Queue * CreateQueue(void)
{
Queue * p; p = (Queue*)malloc(sizeof(Queue));
p->key = (KeyType*)malloc(sizeof(KeyType));
p->count = 0;
p->rear = 0;
p->front = 0; return p;
} //判断队列是否为空
bool QueueIsEmpty(Queue * p)
{
return (p->count == 0) ? true : false;
} //判断队列是否已满
bool QueueIsFull(Queue * p)
{
return (p->count == MAXSIZE) ? true : false;
} //返回当前队列元素的个数
int QueueItemCount(Queue * p)
{
return p->count;
} //入队
bool QueueAdd(Queue * p, KeyType DATA)
{
if(QueueIsFull(p))
return false;
p->key[p->rear++] = DATA;
p->count++;
return true;
} //出队
bool QueueRemove(Queue * p)
{
if(QueueIsEmpty(p))
return false;
p->front++;
p->count--;
return true;
} //返回队首元素
KeyType GetQueueFront(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->key[p->front];
} //返回队尾元素
KeyType GetQueueRear(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->key[p->rear - 1];
} // 遍历队列
void TraverseQueue(Queue * p)
{
for(int i = p->front; i < p->rear; i++)
printf("%d ", p->key[i]);
printf("\n");
} // 清空队列
bool ClearQueue(Queue * p)
{
for(int i = p->front; i < p->rear; i++)
p->key[i] = 0;
p->count = 0;
p->front = 0;
p->rear = 0; return true;
} // 删除队列
void DeleteQueue(Queue * p)
{
if(p != NULL)
{
ClearQueue(p);
free(p);
p = NULL;
}
} int main()
{
Queue*h = CreateQueue();
KeyType val;
char c; puts("按 1 查看 按 2 入队");
puts("按 3 出队 按 4 返回队首元素");
puts("按 5 返回队尾元素 按 6 当前队列长度");
puts("按 7 清空队列 按 8 退出程序"); while((c = getch()) != '8') {
switch(c) {
case '1':
puts("队列:");
TraverseQueue(h);
break;
case '2':
puts("输入数据:");
scanf("%d", &val);
if(QueueAdd(h, val))
puts("已加入!");
else
puts("添加失败!");
break;
case '3':
if(QueueRemove(h))
puts("已移除!");
else
puts("移除失败!");
break;
case '4':
printf("\n当前队首元素为:%d\n", GetQueueFront(h));
break;
case '5':
printf("\n当前队尾元素为:%d\n", GetQueueRear(h));
break;
case '6':
printf("\n当前队列个数为:%d\n", QueueItemCount(h));
break;
case '7':
if(ClearQueue(h))
puts("已清空!");
break;
}
}
DeleteQueue(h); return 0;
}

  code2:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h> #define MAXSIZE 65533 #define bool int
#define true 1
#define false 0 typedef int KeyType; typedef struct queue
{
KeyType * key;
int front;
int rear;
}Queue; /* 定义所有函数 */
Queue * CreateQueue();
bool QueueIsEmpty();
bool QueueIsFull();
int QueueItemCount();
bool QueueAdd();
bool QueueRemove();
KeyType GetQueueFront();
KeyType GetQueueRear();
void TraverseQueue();
bool ClearQueue();
void DeleteQueue(); //建立队列
Queue * CreateQueue(void)
{
Queue * p; p = (Queue*)malloc(sizeof(Queue));
p->key = (KeyType*)malloc(sizeof(KeyType));
p->rear = 0;
p->front = 0; return p;
} //判断队列是否为空
bool QueueIsEmpty(Queue * p)
{
return (p->front == p->rear) ? true : false;
} //判断队列是否已满
bool QueueIsFull(Queue * p)
{
return ((p->rear + 1)%MAXSIZE == p->front) ? true : false;
} //返回当前队列元素的个数
int QueueItemCount(Queue * p)
{
return (p->rear - p->front + MAXSIZE) % MAXSIZE;
} //入队
bool QueueAdd(Queue * p, KeyType DATA)
{
if(QueueIsFull(p))
return false;
p->key[p->rear++] = DATA;
return true;
} //出队
bool QueueRemove(Queue * p)
{
if(QueueIsEmpty(p))
return false;
p->front++;
return true;
} //返回队首元素
KeyType GetQueueFront(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->key[p->front];
} //返回队尾元素
KeyType GetQueueRear(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->key[p->rear - 1];
} // 遍历队列
void TraverseQueue(Queue * p)
{
for(int i = p->front; i < p->rear; i++)
printf("%d ", p->key[i]);
printf("\n");
} // 清空队列
bool ClearQueue(Queue * p)
{
for(int i = p->front; i < p->rear; i++)
p->key[i] = 0;
p->front = 0;
p->rear = 0; return true;
} // 删除队列
void DeleteQueue(Queue * p)
{
if(p != NULL)
{
ClearQueue(p);
free(p);
p = NULL;
}
} int main()
{
Queue*h = CreateQueue();
KeyType val;
char c; puts("按 1 查看 按 2 入队");
puts("按 3 出队 按 4 返回队首元素");
puts("按 5 返回队尾元素 按 6 当前队列长度");
puts("按 7 清空队列 按 8 退出程序"); while((c = getch()) != '8') {
switch(c) {
case '1':
puts("队列:");
TraverseQueue(h);
break;
case '2':
puts("输入数据:");
scanf("%d", &val);
if(QueueAdd(h, val))
puts("已加入!");
else
puts("添加失败!");
break;
case '3':
if(QueueRemove(h))
puts("已移除!");
else
puts("移除失败!");
break;
case '4':
printf("\n当前队首元素为:%d\n", GetQueueFront(h));
break;
case '5':
printf("\n当前队尾元素为:%d\n", GetQueueRear(h));
break;
case '6':
printf("\n当前队列个数为:%d\n", QueueItemCount(h));
break;
case '7':
if(ClearQueue(h))
puts("已清空!");
break;
}
}
DeleteQueue(h); return 0;
}

ArrayQueue(队列)的更多相关文章

  1. 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列

    栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完 ...

  2. java 数据类型:集合接口Collection之队列Queue:PriorityQueue ;Dequeue接口和ArrayDeque实现类:

    什么是Queue集合: Queue用于模拟队列这种数据结构,队列通常是"先进先出"(FIFO)的容器.队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素.    ...

  3. java——数组队列 ArrayQueue

    队列: Array: package Date_pacage; public class Array<E> { //叫它静态数组 //private int[] data; private ...

  4. 队列的JS实现

    队列和栈相似,都是对插入和删除操作的部位做了限制特殊的线性表.在队列中,只能从一头删除节点,这一头叫做队首:而另一端只能做插入操作,这一头叫做队尾.很容易理解,队列是一个"先进先出" ...

  5. 【数据结构初学】(java实现篇)——队列(转)

    原文地址:http://www.cnblogs.com/skywang12345/p/3603935.html 原文地址:http://www.cnblogs.com/skywang12345/p/3 ...

  6. 队列的图文解析 和 对应3种语言的实现(C/C++/Java)

    概要 本章和介绍"栈"时的流程一样,先对队列进行介绍,然后分别给出队列的C.C++和Java三种语言的实现.内容包括:1. 队列的介绍2. 队列的C实现3. 队列的C++实现4.  ...

  7. [数据结构与算法]队列Queue 的多种实现

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  9. 队列的实现(JAVA)

    定义    队列(queue)是一种特殊的线性表,它只允许在表的前端进行删除,在表的后端进行插入. 进行插入端的称为队尾,进行删除端的称为队头.队列是先进先出原则的.队列的实现同样可以 使用两种方式来 ...

随机推荐

  1. django url映射的时候指定默认参数

    使用path或者re_path后,在url中都可以包含参数,而有时候想指定默认的参数,可以通过在urls.py中写两个url都指向同一个视图函数.一个带参数一个不带参数.同时,在视同函数的参数中设置默 ...

  2. Bugku-CTF之各种绕过

    Day28   各种绕过 各种绕过哟 http://123.206.87.240:8002/web7/

  3. Sass&Scss入门 选择器 混合器 导入 条件判断 迭代

    Sass 基于ruby的一种将脚本解析成CSS的脚本语言.也可以说是一种预处理语言. Sass在css的语法基础上增加了变量.嵌套.混合.继承.导入等高级功能. 使用Sass与Sass样式库(如com ...

  4. 吴裕雄 python 机器学习——多维缩放降维MDS模型

    # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...

  5. apt-get install 下载速度慢问题的解决

    参考博客:https://blog.csdn.net/weixin_38538240/article/details/99665433 重点:在software&updates中更换为国内的源 ...

  6. mysql 隔离性与隔离级别

    提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务.最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱. 转账过程具体到程序里会有一系列的操作,比如 ...

  7. AngularJS请求数据提示resource from url not allowed by $sceDelegate policy

    AngularJS iframe跨域打开内容时报错 解决方案 使用  $sceDelegateProvider  配置跨域请求域名 config.js app.config(function($sce ...

  8. PyCharm安装及汉化设置为中文(附汉化包)

    下载:https://www.jetbrains.com/pycharm/download/#section=windows 下载社区版免费 双击运行安装程序 Next 选择安装路径安装 创建桌面快捷 ...

  9. ECMAScript 6.0

    ES6怎么来的 ECMAScript 和 JavaScript ECMA 是标准,JS 是实现 ECMAScript 简称 ECMA 或 ES 历史版本 1996, ES1.0 Netscape 将 ...

  10. C#加载XML方式

    //path:xml文件路径  SECSMessage:xml文件的根元素下的第一个子集元素 <SECSLibrary> <SECSMessage> <Descripti ...