`
473687880
  • 浏览: 482359 次
文章分类
社区版块
存档分类
最新评论

基本算法——队列的顺序表示

 
阅读更多
以下为操作队列的算法,该队列为静态队列,用循环数组实现。
给该队列分配的内存长度为len+1,但实际只用了len个内存空间来保存数据,这样做是为了更方便判断队列的满与空。队列中front位置中存放的是队首的数据,rear位置的前一个位置中存放队尾的数据,而rear位置中则没有数据存放,这样做的目的是为了在入队和出队时方便对队列的操作,而不用考虑特殊情况

操作系统:ubuntu
编译软件:gcc
结果截图:
源代码:
#include
#include
#include


int len;//全局变量,静态队列的实际有效长度,即实际存放了len个数
typedef struct Queue
{
int *pBase;
int front;
int rear;
} QUEUE,*PQUEUE;


PQUEUE creat_queue();
bool enter_queue(PQUEUE,int);
bool full_queue(PQUEUE);
bool empty_queue(PQUEUE);
void traverse_queue(PQUEUE);
bool out_queue(PQUEUE,int *);


int main()
{ //创建静态队列,并定义出队数据的保存在变量data_save中
int data_save;
PQUEUE pQueue = creat_queue();
//将数据入队,并遍历输出队列中的数据
enter_queue(pQueue,1);
enter_queue(pQueue,2);
enter_queue(pQueue,3);
enter_queue(pQueue,4);
        traverse_queue(pQueue);
//将数据出队,并遍历输出队列中的数据
out_queue(pQueue,&data_save);
        traverse_queue(pQueue);


return 0;
}


//创建并初始化一个空的静态队列,返回指向该队列的指针,此时首尾在队列同一位置处


PQUEUE creat_queue()
{
printf("Input the length of the queue:\n");
scanf("%d",&len);
PQUEUE pQueue = (PQUEUE)malloc(sizeof(QUEUE));
pQueue->pBase = (int *)malloc(sizeof(int)*(len+1));
if(NULL==pQueue || NULL==pQueue->pBase)
{
  printf("malloc failed!");
  exit(-1);
}
else
{
  pQueue->front = 0;
  pQueue->rear = 0;
}
return pQueue;
}


//判断该静态队列是否满
bool full_queue(PQUEUE pQueue)
{
if(pQueue->front == (pQueue->rear+1)%(len+1))
  return true;
else
  return false;
}


//判断该静态队列是否空
bool empty_queue(PQUEUE pQueue)
{
if(pQueue->front == pQueue->rear)
  return true;
else
  return false;
}


//将变量val从队尾入队
bool enter_queue(PQUEUE pQueue,int val)
{
if(full_queue(pQueue))
  return false;
else
{
  pQueue->pBase[pQueue->rear] = val;
  pQueue->rear = (pQueue->rear+1)%(len+1);
  return true;
}
}


//将数据出队,并将其保存在out_data指针指向的位置
bool out_queue(PQUEUE pQueue,int *out_data)
{
if(empty_queue(pQueue))
  return false;
else
{
  *out_data = pQueue->front;
      pQueue->front = (pQueue->front+1)%(len+1);
  return true;
}
}


//遍历该静态队列,并自队首向队尾输出队列中的数据


void traverse_queue(PQUEUE pQueue)
{
int i = pQueue->front;
printf("now datas in the queue are:\n");
while(i != pQueue->rear)
{
  printf("%d ",pQueue->pBase[i]);
  i = (i+1)%(len+1);
}
printf("\n");
return ;

分享到:
评论

相关推荐

    操作系统程序设计-(-编程描述页面置换算法——先进先出算法 )

    操作系统中编程描述页面置换算法——先进先出算法。 一、目的和要求 给出页面访问的顺序与分配给作业的主存块数,使用队列作为数据结构编写算法,实现统计缺页次数与页面置换操作,用C语言编程并用文档形式给出...

    数据结构&算法——Java.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    数据结构算法——Visual C++ 6.0程序集PPT

    侯识忠 等编著 共10章 第一章 顺序存储结构的表、堆栈和队列 第二章链式存储结构的表,堆栈和队列 第三章 数组、串和广义表 第四章 递归 .....

    严蔚敏 数据结构(C语言版) 代码 23490 书中算法

    3.4.2 循环队列——队列的顺序表示和实现 62 3.4.3 链队——队列的链式表示和实现 65 3.5 队列的应用 67 3.6 小结 69 习题 69 第4章 串、数组和广义表 73 4.1 串 73 4.1.1 串的类型定义 73 4.1.2 串...

    算法和数据结构——左程云.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    数据结构实验三(循环队列基本操作)题目和源程序

    1.任意输入队列长度和队列中的元素值,构造一个顺序循环队列,对其进行清空、插入新元素、返回队头元素以及删除队头元素操作。 2.约瑟夫环的实现:设有n个人围坐在圆桌周围,现从某个位置 i 上的人开始报数,数到 ...

    操作系统——磁盘调度算法【java实现】

    用java实现的四种磁盘调度算法:fcfs sstf scan cscan 。 可以随机生产磁道号,也可以自己指定。然后用表格的形式呈现出四种算法的磁道访问序列。欢迎下载。

    C/C++常用算法手册.秦姣华(有详细书签).rar

    9.6.1 计算最大公约数算法——搌转相除法 287 9.6.2 计算最大公约数算法一一Stein算法 288 9.6.3 计算最大公约数示例 289 9.7 最小公倍数 290 9.8 素数 292 9.8.1 素数概述 292 9.8.2 计算素数算法 292 9.9 ...

    数据结构习题答案(全部算法)严蔚敏版

    1.2.2 算法描述工具——C语言 1.2.3 算法分析技术初步 习题一 第2章 线性表 2.1 线性表的定义及其运算 2.1.1 线性表的定义 2.1.2 各种运算简介 2.2 线性表的顺序存储结构(向量) 2.2.1 顺序存储结构...

    程序员代码面试指南——IT名企算法和数据结构题目最优解.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    python数据结构与算法详解与源码

    2-02 基本顺序表与元素外围顺序表 recv 2-03 顺序表的一体式结构与分离式结构 recv 2-04 顺序表数据区替换与扩充 recv 三、栈 3-01 栈与队列的概念 3-02 栈的实现 3-03 队列与双端队列的实现 四、链表 4-01 ...

    数据结构讲义(严蔚敏版)(含算法源码).rar

    2. 顺序表——线性表的顺序存储结构 7 3. 单链表——线性表的链式存储结构之一 10 4. 循环链表 15 5. 双向循环链表 15 6. 顺序表与单链表的比较 16 二、 习题 16 第3章 栈和队列 17 一、 基础知识和算法 17 1. 栈 17...

    算法:算法C语言实现 第1-4部分 基础知识、数据结构、排序及搜索

    第三部分“排序”(第6~11章)按章节顺序分别讨论基本排序方法(如选择排序、插入排序、冒泡排序、希尔排序等)、快速排序方法、归并和归并排序方法、优先队列与堆排序方法、基数排序方法以及特殊用途的排序方法,...

    严蔚敏《数据结构》源码 顺序表——二叉树

    目前写在了图,之后的内容会在github上持续更新,数据结构系列更新完之后,可能会更新算法的教程(参考屈婉玲版《算法设计与分析》)希望可以帮到各位!! InitList.cpp------顺序表 LinkList.cpp------链表 ...

    数据结构与算法分析第二版 ---C语言描述(附加答案)

    不相交集ADT8.1 等价关系8.2 动态等价性问题8.3 基本数据结构8.4 灵巧求并算法8.5 路径压缩8.6 按秩求并和路径压缩的最坏情形8.6.1 Union/Find算法分析8.7 一个应用总结练习参考文献第9章 图论算法9.1 若干定义9.1.1...

    华南 数据结构上机实验代码 完整代码

    顺序线性表的基本操作 合并顺序表 顺序表逆置 链式线性表的基本操作 合并链表 线性链表逆置 顺序栈的基本操作 循环队列的基本操作 栈的应用——进制转换 括号匹配检验 行编辑程序 表达式求值 队列的应用...

    数据结构与算法分析

    书的内容包括表、栈、队列、树、散列表、优先队列、排序、不相交集算法、图论算法、算法分析、算法设计、摊还分析、查找树算法、k-d树和配对堆等。本书适合作为计算机相关专业本科生的数据结构课程和研究生算法分析...

    数据结构与算法分析_Java语言描述(第2版)

    中文名: 数据结构与算法分析_Java语言描述(第2版) 作者: 韦斯 译者: 冯舜玺 图书分类: 软件 资源格式: PDF 版本: 扫描版 出版社: 机械工业出版社 书号: ISBN:9787111231837 发行时间: 2009年01月01日 地区: 大陆 ...

    数据结构—使用C语言(第4版)【朱战立-电子教案】

    串的模式匹配算法——BF算法 【第5章】 数组 数组的基本概念 动态数组 特殊矩阵 稀疏矩阵 【第6章】 递归算法 递归的概念 递归算法的执行过程 递归算法的设计方法 递归过程和运行时栈 递归算法的效率分析 设计举例...

Global site tag (gtag.js) - Google Analytics