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)是一种特殊的线性表,它只允许在表的前端进行删除,在表的后端进行插入. 进行插入端的称为队尾,进行删除端的称为队头.队列是先进先出原则的.队列的实现同样可以 使用两种方式来 ...
随机推荐
- MySql 怎么存取 Emoji
01.前言 Emoji 在我们生活中真的是越来越常见了,几乎每次发消息的时候不带个 Emoji,总觉得少了点什么,似乎干巴巴的文字已经无法承载我们丰富的感情了.对于我们开发者来说,如何将 Emoji ...
- 【visio】数据流图
率属于 软件和数据库 又名 Gane-Sarson图,数据流图示描述系统数据流程关系的工具,它可以综合的反映出数据在系统中的来源.流动.处理和存储情况,可以将数据流形象具体的表现出来. 在大型项目中, ...
- 路飞-后台Django项目创建
后台:Django项目创建 环境 """ 为luffy项目创建一个虚拟环境 >: mkvirtualenv luffy """ &qu ...
- Ansible - 配置文件
概述 再水一发 ref Ansible Configuration Settings 1. 查看 概述 查看 配置文件 的默认位置 命令 > ansible --version 结果 confi ...
- 深入理解python(四)python基础知识之函数
函数部分 函数部分大概想分成两个部分来讲,第一部分是关于对函数参数的介绍,第二部分是局部变量全局变量和内置变量也就是变量作用域的LGB原则 函数的参数 1.关于形参和实参的问题 第一点要注意的是pyt ...
- springboot集成实现秒杀
springboot集成开发实现商场秒杀 加入主要依赖 <dependency> <groupId>org.springframework.boot</groupId&g ...
- Coursera-吴恩达机器学习课程笔记-Week1
参考资料: 吴恩达教授机器学习课程 机器学习课程中文笔记 Week 1 一. 引言 机器学习模型可分为监督学习Superviese learning(每个数据集给出了正确的值)和无监督学习Unsupe ...
- 基于springboot实现轮询线程自动执行任务
本文使用: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时 ...
- Jmeter_选项_函数助手_RandomString的用法
1.用处:测试账户注册可以通过随机生成数实现,而不需要Excel手动输入, 缺点:随机生成数可能会重复 优点:不需要使用CSV config 或者excel ,txt格式 2.举例:之前我们通过CSV ...
- 消息队列(五)--- RocketMQ-消息存储4
问题 index 文件有什么作用,结构又是如何 概述 index 文件主要是为了 message key 服务的,rocketmq 发送消息的时候可以带上 key , messge key 是为了标识 ...