ArrayQueue(队列)
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(队列)的更多相关文章
- 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列
栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完 ...
- java 数据类型:集合接口Collection之队列Queue:PriorityQueue ;Dequeue接口和ArrayDeque实现类:
什么是Queue集合: Queue用于模拟队列这种数据结构,队列通常是"先进先出"(FIFO)的容器.队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素. ...
- java——数组队列 ArrayQueue
队列: Array: package Date_pacage; public class Array<E> { //叫它静态数组 //private int[] data; private ...
- 队列的JS实现
队列和栈相似,都是对插入和删除操作的部位做了限制特殊的线性表.在队列中,只能从一头删除节点,这一头叫做队首:而另一端只能做插入操作,这一头叫做队尾.很容易理解,队列是一个"先进先出" ...
- 【数据结构初学】(java实现篇)——队列(转)
原文地址:http://www.cnblogs.com/skywang12345/p/3603935.html 原文地址:http://www.cnblogs.com/skywang12345/p/3 ...
- 队列的图文解析 和 对应3种语言的实现(C/C++/Java)
概要 本章和介绍"栈"时的流程一样,先对队列进行介绍,然后分别给出队列的C.C++和Java三种语言的实现.内容包括:1. 队列的介绍2. 队列的C实现3. 队列的C++实现4. ...
- [数据结构与算法]队列Queue 的多种实现
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 线性表 及Java实现 顺序表、链表、栈、队列
数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...
- 队列的实现(JAVA)
定义 队列(queue)是一种特殊的线性表,它只允许在表的前端进行删除,在表的后端进行插入. 进行插入端的称为队尾,进行删除端的称为队头.队列是先进先出原则的.队列的实现同样可以 使用两种方式来 ...
随机推荐
- Tomcat目录说明
apache-tomcat-x.x.xx bin:保存启动与监控Tomcat的命令文件的文件夹 conf:保存Tomcat配置文件的文件夹,如servlet.xml为服务器的主配置文件,web.xml ...
- 第八届蓝桥杯C++B组 日期问题
标题:日期问题 小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月31日.令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的 ...
- kali中网卡、ssh、apache的配置与开启
在Kali-linux中修改网卡文件,启动ssh和apache服务的方法 1.su root //取得root权限 2.shift+字母 //大小写字母切换 3.修改网卡 ...
- Nuxt的默认模板和默认布局
Nuxt为我们提供了超简单的默认模版订制方法,只要在根目录下创建一个app.html就可以实现了 注:建立了默认模板后,记得要重启服务器,否则你的显示不会成功 默认布局主要针对于页面的统一布局使用.它 ...
- selenium通过cookies直接免密登录
前提知识: 1.webdriver中提供了操作cookie的相关方法: get_cookies() 获得cookie信息 add_cookie(cookie_di ...
- Docker - Dockerfile - 常见命令简介
概述 感觉是个 比较重要的东西 有个疑问 我是先讲 docker build 还是 先讲 Dockerfile 穿插讲 docker build 最基本的东西 原理 -t -f docker file ...
- Java - JVM - 类的生命周期
概述 简述 JVM 里 类的生命周期 上次写了 30%, 居然丢了 难受, 又要重新写 类的生命周期 加载 使用 卸载 1. 加载 概述 类型的加载 大体流程 装载 连接 验证 准备 解析(可选的) ...
- SQL语句 分组 多行合并成一行
,,'')) FROM Table d GROUP by Id 另外: sql 单引号转义:两个单引号转义为一个单引号 set @sql='STUFF((SELECT '','' + Names FR ...
- Ubuntu执行sudo apt-get update报错E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁
一.强制解锁,执行语句 sudo rm /var/lib/apt/lists/lock 二.终端输入 ps -aux | grep apt-get 查看一下apt-get的相关进程.然后sudo ki ...
- Android Studio真机无线调试
条件 手机要和电脑处于同一局域网内(即都连同一个WiFi 或者电脑的网线另外一段连接到手机连接WiFi的路由上) 步骤 .首先将手机连接 WiFi 网络 .将手机用数据线与电脑连接,并且在电脑端 打开 ...