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. Blocked Billboard II

    前言 今天比赛真的状态不好(腐了一小会),导致差点爆0. 这个题解真的是在非常非常专注下写出来的,要不然真的心态崩. 刚换了域名,发现了美化脚本的bug,有点担心(汗-_-||). 题目 题目描述 奶 ...

  2. c语言thread用法记录。

    https://blog.csdn.net/hitwengqi/article/details/8015646 先是c++11之前的 1.最基础,进程同时创建5个线程,各自调用同一个函数 #inclu ...

  3. 闲来无事.gif

  4. 服务器安装mysql后配置远程访问权限

    #登录mysql mysql -uroot -p: use mysql: #所有ip能访问 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED B ...

  5. Mybatis plus中一个框多条件查询 SQL拼接

    遇到多条件查询时,只用框架自带的方法搞不定,只能自己写方法拼接 EntityWrapper<YcejShopEntity> wrapper = new EntityWrapper<& ...

  6. jumpserver sudo 权限控制模板

    sudo 权限控制,常用 ALL,!/bin/bash,!/bin/tcsh,!/bin/su,!/usr/bin/passwd,!/usr/bin/passwd root,!/bin/vim /et ...

  7. Go_defer

    package main import "fmt" func main() { //外围函数 /* defer的词义:"延迟","推迟" 在 ...

  8. 关于jsp的action如何调用servlet的自定义方法

    一.起因: 希望将同属于某个模块的简单功能整合到一起,不创建太多的servlet 二.问题描述: action或者method属性是否能直接调用自定义方法 三.补充知识点: 查询得知:servelet ...

  9. sshpass远程登陆

    1,ssh ssh 端口为默认22的时候: sshpass -p 888888 scp -o StrictHostKeyChecking=no /root/images.zip root@21.1.9 ...

  10. [蓝桥杯2017初赛]青蛙跳杯子 BFS

    题目描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙 ...