/*
队列:一种先进先出的线性表,它只允许在表的一端插入元素,另一端
删除元素,其中插入元素的一端叫做队尾,删除元素的一端叫做对头。静态队列——使用一维数组储存队列中的元素,一个指针(front)指向
队头,一个指针(rear)指向队尾。
使用的数组必须是循环数组
*/# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>#define LEN 6  // 定义队列长度 // 说明:此循环队列使用空出一个位置的方法解决队列空与满的问题
typedef struct QUEUE
{int * pBase;       // 用于作为循环数组 int front;       // 用于标记队列头 int rare;        // 用于标记列尾
}Queue, * pQ; // 创建一个静态队列
void Create_Queue(pQ queue, int len);
// 静态队列初始化
void Init_Queue(pQ queue);
// 遍历整个队列
void Travel_Queue(pQ queue);
// 判断队列是否满
bool Is_Full(pQ queue);
// 判断队列是否为空
bool Is_Empty(pQ queue);
// 入队
void En_Queue(pQ queue, int val);
// 出队,并将出队的数据返还给主函数
void Out_Queue(pQ queue, int * val);
// 在队列中查找某元素,并返回该位置
int Search_InQueue(pQ queue, int val);
// 计算此时队列长度
int Length_Queue(pQ queue);
// 销毁整个队列
void Destory_Queue(pQ queue); int main(void)
{Queue queue;Create_Queue(&queue, LEN);Init_Queue(&queue);En_Queue(&queue, 1);En_Queue(&queue, 2);En_Queue(&queue, 3);En_Queue(&queue, 4);Travel_Queue(&queue);int len = Length_Queue(&queue);printf("队列长度为:%d\n", len);int val;Out_Queue(&queue, &val);printf("出队的元素是:%d\n", val);Search_InQueue(&queue, 5);Destory_Queue(&queue);return 0;
}void Create_Queue(pQ queue, int len)
{ queue->pBase = (int *)malloc(len * (sizeof(int)));if (NULL == queue->pBase){printf("动态内存分配失败!\n");exit(-1);} return;
} void Init_Queue(pQ queue)
{queue->front = 0;queue->rare = 0;return;
}void Travel_Queue(pQ queue)
{int pos;for (pos = queue->front; pos != queue->rare; pos = (pos+1) % LEN){printf("%-5d", queue->pBase[pos]);}printf("\n");return;
}bool Is_Full(pQ queue)
{if ( (queue->rare + 1) % LEN == queue->front )return true;elsereturn false;
}bool Is_Empty(pQ queue)
{if (queue->front == queue->rare)return true;elsereturn false;
}void En_Queue(pQ queue, int val)
{if ( Is_Full(queue) ){printf("该队列已满!\n");exit(-1);}queue->pBase[queue->rare] = val;queue->rare = (queue->rare + 1) % LEN;return;
}void Out_Queue(pQ queue, int * val)
{if ( Is_Empty(queue) ){printf("该队列为空!\n");exit(-1);}*val = queue->pBase[queue->front];queue->front = (queue->front + 1) % LEN;return;
}int Search_InQueue(pQ queue, int val)
{int pos;for (pos = queue->front; pos != queue->rare; pos = (pos+1) % LEN){if (queue->pBase[pos] == val){return pos;}}printf("该元素不在此队列!\n");return -1;
}int Length_Queue(pQ queue)
{int pos, cnt = 0;for (pos = queue->front; pos != queue->rare; pos = (pos+1) % LEN){++cnt;}return cnt;
}void Destory_Queue(pQ queue)
{free(queue->pBase);queue->pBase = NULL;return;
}

转载于:https://www.cnblogs.com/lnlin/p/6730920.html

数据结构 静态队列笔记相关推荐

  1. 数据结构 --静态队列 讲解

    上次我在 http://blog.csdn.net/nvd11/article/details/8805772 已经解释了链式队列的大概结构和c语言代码实现. 也提到了另一种队列: 静态队列.  其实 ...

  2. 数据结构 --静态队列的一个简单的C语言代码实现

    静态队列的大概原理和部分算法讲解已经在上一篇博文中讲过了.. http://blog.csdn.net/nvd11/article/details/8816699 这里接上篇文章, 用c语言来实现1个 ...

  3. 数据结构源码笔记(C语言):链接队列

    /* LinkQueue.c*/ /*链接队列:函数实现*/#include <stdio.h> #include <stdlib.h>typedef int DataType ...

  4. c++ 优先队列_C/C++数据结构:队列结构最全解析!带你零基础入门队列结构

    前言 上一章节针对于C语言栈结构做了解析,不清楚的可以回顾一下. 本章节主要针对于C语言的基础数据结构队列做以解析. 数据结构之队列 队列是一种特殊的 线性表 ,特殊之处在于它只允许在表的前端(fro ...

  5. 数据结构课程学习笔记

    整理一下上数据结构课记录的笔记. 第一章 绪论 1.1 数据结构的基本概念 1.2 算法的基本概念 1.2.1 时间复杂度 事前预估算法时间开销T(n)与问题规模n的关系.分析算法操作的执行次数x和问 ...

  6. 数据结构期末复习笔记(NEU版)

    数据结构期末复习笔记 绪论 数据结构的概念 数据结构的分类 数据结构研究的内容 算法的重要特性 算法的设计要求 题目汇总 线性表 栈和队列 栈 队列 题目 数组与广义表 树 二叉树 二叉树的遍历 线索 ...

  7. 数据结构源码笔记(C语言描述)汇总

    数据结构源码笔记(C语言):英文单词按字典序排序的基数排序 数据结构源码笔记(C语言):直接插入排序 数据结构源码笔记(C语言):直接选择排序 数据结构源码笔记(C语言):置换-选择算法 数据结构源码 ...

  8. 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序

    //实现英文单词按字典序排序的基数排序算法#include<stdio.h> #include<malloc.h> #include<string.h>#defin ...

  9. 数据结构源码笔记(C语言):索引文件建立和查找

    //实现索引文件建立和查找算法#include<stdio.h> #include<malloc.h> #include<string.h> #include< ...

  10. 数据结构源码笔记(C语言):快速排序

    //实现快速排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...

最新文章

  1. synchronized与Lock的区别与使用
  2. android drawerlayout 遮罩层白色,DrawerLayout放在Toolbar的下方导致NavigationView出现与状态栏等高的遮...
  3. mysql数据库自动转储_mysql数据库数据定时封装转储
  4. KubeNode:阿里巴巴云原生 容器基础设施运维实践
  5. postman模拟登录接口
  6. 主板和cpu搭配表_GTX1650显卡搭配知识:GTX1650配什么CPU和主板及多大电源?
  7. Active Directory边界
  8. .NET Conf 2019 今天在上海开幕,图片直播地址
  9. phpcmsV9 排序规则 - 小结篇
  10. 对开源库 limdu 命令注入漏洞 (CVE-2020-4066) 的简要分析
  11. 一、UNIX系统概述
  12. 史上最全的画册制作流程—设计前的策划
  13. VScode代码美化工具Beautify
  14. 微信群二维码七天失效如何解决?有没有办法创建一个长期有效的微信群?
  15. TP5.1数据库安全
  16. java-画出二维码
  17. 接收信号强度值dbm分析
  18. Twitter网页版推出通用搜索功能 复制链接
  19. 笔记 | 杂谈控制固定效应这件事
  20. 女博士年薪156万入职华为:给员工吃饱了,他们才会为你拼命

热门文章

  1. 电话聊天狂人 (25 分)(map映射 简单做法)
  2. js基础知识汇总04
  3. Python:functools.cmp_to_key(func)使用
  4. APIcloud解决检出到指定路径:false问题
  5. Caffe傻瓜系列(7):solver优化方法
  6. deepsort报错 No module named ‘sklearn.utils.linear_assignment_‘ 问题解决
  7. Linux 命令之——文件行数查询命令温习
  8. 解决Python安装后目录下缺失Scripts文件夹
  9. 计算机课程联合考试是什么意思,计算机技术在职研究生能否通过一月联考的方式学习课程内容...
  10. android httpget 参数,如何在Android中向HTTP GET请求添加参数?