C语言描述队列的实现及操作(数组实现)
一.静态数组实现
1.队列接口
#include<stdio.h> // 一个队列模块接口
// 命名为myqueue.h #define QUEUE_TYPE int // 定义队列类型为int // enqueue函数
// 把一个新值插入队列末尾
void enqueue(QUEUE_TYPE value); // dequeue函数
// 删除队列首元素并返回
QUEUE_TYPE dequeue(void ); // is_empty函数
// 判断队列是否为空
bool is_empty(void); // is_full函数
// 判断队列是否已经满
bool is_full(void); // front函数
// 返回队列第一个值
QUEUE_TYPE front_value(void); // get_size函数
// 获取队列元素个数
int get_size(void);
2.静态数组队列
#include<stdio.h>
#include<assert.h>
#include"myqueue.h" const int QUEUE_SIZE=; //队列中元素个数最大限制
static QUEUE_TYPE queue[QUEUE_SIZE+]; //存储队列中值的数组
static int front = ; //指向队列首元素的指针
static int rear = ; //指向队列尾元素的指针 void enqueue(QUEUE_TYPE value) {
// 判断队列是否为满
assert(!is_full());
// 判断队列是否为空
if (is_empty())
queue[front] = value;
queue[rear] = value;
rear = (rear + ) % (QUEUE_SIZE + ); } QUEUE_TYPE dequeue(void) {
//判断队列是否为空
assert(!is_empty()); int temp = queue[front];
front = (front + ) % (QUEUE_SIZE + );
return temp;
} bool is_empty(void) {
//如果rear==front则队列为空
return rear == front;
} bool is_full(void) {
//如果(rear+1)%(QUEUE_SIZE+1)==front则队列为满
return (rear + ) % (QUEUE_SIZE + ) == front;
} QUEUE_TYPE front_value(void) {
return queue[front];
} int get_size(void) {
return (rear-front);
}
二.动态数组实现
1.队列接口
#include<stdio.h>
// 在原有基础上增加了creat_queue和destroy_queue函数
#define QUEUE_TYPE int // 定义队列类型为int // creat_queue函数
// 创建一个队列
void creat_queue(size_t size); // destroy_queue函数
// 销毁队列
void destroy_queue(void); // enqueue函数
// 把一个新值插入队列末尾
void enqueue(QUEUE_TYPE value); // dequeue函数
// 删除队列首元素并返回
QUEUE_TYPE dequeue(void ); // is_empty函数
// 判断队列是否为空
bool is_empty(void); // is_full函数
// 判断队列是否已经满
bool is_full(void); // front函数
// 返回队列第一个值
QUEUE_TYPE front_value(void); // get_size函数
// 获取队列元素个数
int get_size(void);
2.动态数组队列
#include<stdio.h>
#include<assert.h>
#include<malloc.h> static QUEUE_TYPE *queue; //定义队列指针
static size_t queue_size; //记录队列大小
static int front = ;
static int rear = ; void creat_queue(size_t size) {
assert(queue_size == );
queue_size = size;
queue =(QUEUE_TYPE*) malloc((queue_size+)*sizeof(QUEUE_TYPE));
assert(queue != NULL);
} void destroy_queue(void) {
assert(queue_size > );
queue_size = ;
free(queue);
queue = NULL;
} void enqueue(QUEUE_TYPE value) {
// 判断队列是否为满
assert(!is_full());
// 判断队列是否为空
if (is_empty())
queue[front] = value;
queue[rear] = value;
rear = (rear + ) % (queue_size + );
} QUEUE_TYPE dequeue(void) {
//判断队列是否为空
assert(!is_empty()); int temp = queue[front];
front = (front + ) % (queue_size + );
return temp;
} bool is_empty(void) {
//如果rear==front则队列为空
return rear == front;
} bool is_full(void) {
//如果(rear+1)%(QUEUE_SIZE+1)==front则队列为满
return (rear + ) % (queue_size + ) == front;
} QUEUE_TYPE front_value(void) {
return queue[front];
} int get_size(void) {
return (rear - front);
}
C语言描述队列的实现及操作(数组实现)的更多相关文章
- C语言描述队列的实现及操作(链表实现)
// 队列的单链表实现 // 头节点:哨兵作用,不存放数据,用来初始化队列时使队头队尾指向的地方 // 首节点:头节点后第一个节点,存放数据 #include<stdio.h> #incl ...
- C语言描述二叉树的实现及操作(链表实现)
概述 二叉树为每个节点最多有两个儿子节点(左儿子节点和右儿子节点)的树. 前序遍历:根结点 ---> 左子树 ---> 右子树. 中序遍历:左子树---> 根结点 ---&g ...
- C语言描述链表的实现及操作
一.链表的创建操作 // 操作系统 win 8.1 // 编译环境 Visual Stuido 2017 #include<stdio.h> #include<malloc.h> ...
- C语言描述栈的实现及操作(数组实现)
一.静态数组实现 1.堆栈接口 // 一个堆栈模块接口 // 命名为stack.h #define STACK_YTPE int // 堆栈所存储值的类型 // push函数 // 把一个新值压入栈中 ...
- C语言描述栈的实现及操作(链表实现)
#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef int Elementtype; / ...
- 【数据结构】之队列(C语言描述)
队列(Queue)是编程中最常用的数据结构之一. 队列的特点是“先进先出”,就像食堂排队买饭一样,先来的人排在前面,后来的人排在后面:前面的人先买饭,买完饭后离开这个队列.这就是队列的原理,它可以进行 ...
- 数据结构(java语言描述)
概念性描述与<数据结构实例教程>大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html. 概述 基本概念及术语 数据 信息的载体,是 ...
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- 数据结构与抽象 Java语言描述 第4版 pdf (内含标签)
数据结构与抽象 Java语言描述 第4版 目录 前言引言组织数据序言设计类P.1封装P.2说明方法P.2.1注释P.2.2前置条件和后置条件P.2.3断言P.3Java接口P.3.1写一个接口P.3. ...
随机推荐
- 04: 使用BeautifulSoup封装的xss过滤模块
目录: 1.1 xss攻击简介 1.2 xss攻击解决方法 1.1 xss攻击简介返回顶部 1.简介 1. 跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS. ...
- 20145301 赵嘉鑫 《网络对抗》Exp5 MSF基础应用
20145301 赵嘉鑫 <网络对抗>Exp5 MSF基础应用 一 实验链接 渗透实验一:MS08_067渗透实验 渗透实验二:MS14_064渗透实验 (首用) 渗透实验三:Adobe ...
- [noip模拟题]LGTB 玩THD
LGTB 最近在玩一个类似DOTA 的游戏名叫THD 有一天他在守一座塔,对面的N 个小兵排成一列从近到远站在塔前面每个小兵有一定的血量hi,杀死后有一定的金钱gi 每一秒,他都可以攻击任意一个活着的 ...
- C++ 细小知识点
1. C++ 拷贝构造函数参数为const类型 原因:因为复制构造函数是用引用方式传递复制对象,引用方式传递的是地址,因此在构造函数内对该引用的修改会影响源对象,防止源对象被修改,就要把参数类型设为c ...
- HDU 4734 (数位DP)题解
思路: dp[pos][pre]代表长度为pos的不大于pre的个数 #include<iostream> #include<cstdio> #include<cstri ...
- dp问题 -挑战例题 2017-7-24
01 背包 题意: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数).求背包能够容纳的最大价值. f[i] ...
- Unity3D学习笔记(十八):动画内容补充
动画系统: 旧动画系统(帧动画系统:关键帧驱动,关键帧记录的数据进行插值移动) 1.添加Animation,添加到父物体上 2.添加动画片段 3.添加关键帧(子物体的坐标是相对于父物体的坐标),帧之间 ...
- Unity3D学习笔记(五):坐标系、向量、3D数学
Unity复习 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ...
- ajax用beforeSend自定义请求过程中客户端事件,提高用户体验
本文为博主原创,未经允许不得转载: 在应用ajax的过程中,当我们再前台提交请求的时候,如果服务端响应事件比较长,就会导致需要等很长时间在前台才能接受到服务端返回的 响应结果,往往会导致用户重复点击按 ...
- UVa 1630 串折叠
https://vjudge.net/problem/UVA-1630 题意: 给出一个由大写字母组成的长度为n的串,折叠成一个尽量短的串.例如:AAAAAAAAABABABCCD折叠成9(A)3(A ...