C语言实现队(循环队列)
来源:互联网 发布:数据库置疑的原因 编辑:程序博客网 时间:2024/06/06 08:40
之前用链表实现队,这里用数组实循环队列,今天又看了一下队列,发现少了计算队列长度的函数
队列的实现代码,牺牲一个元素存储空间
#include<stdbool.h>#define maxsize 10typedef int datatype;//定义队的结构体struct queue{ datatype data[maxsize]; int front; int rear;};typedef struct queue Queue;//初始化队void init(Queue *q){ q->front=q->rear=0;}//判断是否为空//这里有两种方法//先实现牺牲一个存储空间的方法,即rear始终指向空bool Empty(Queue *q){ if(q->front==q->rear) { return true; } else { return false; }}//判断是否满bool full(Queue *q){ if((q->rear+1)%maxsize==q->front) { return true; } else { return false; }}//入队void Push(Queue *q,datatype element){ if(!full(q)) { q->data[q->rear]=element; q->rear=(q->rear+1)%maxsize; } else { printf("队满!\n"); }}//出队void Pop(Queue *q){ if(!Empty(q)) { q->front=(q->front+1)%maxsize; } else { printf("队空\n"); }}//取队顶元素datatype Top(Queue *q){ if(!Empty(q)) { return q->data[q->front]; } else { printf("队空\n"); }}
队列的测试代码
#include<stdio.h>#include "CircleQueue.h"int main(){ int i=0; Queue s; Queue *q=&s; // struct stack s; //初始化队 printf("\n###########初始化队###########\n"); init(q); printf("----------------------------------"); //入队操作 printf("\n###########入队操作###########\n"); for(i=2;i<=11;i++) { Push(q,i); } printf("----------------------------------"); //取队顶元素 printf("\n###########取队顶元素###########\n"); printf("%d\n",Top(q)); Pop(q); Pop(q); printf("----------------------------------"); //入队操作 printf("\n###########入队操作###########\n"); for(i=215;i<=219;i++) { Push(q,i); } printf("----------------------------------"); //出队操作 printf("\n###########出队操作###########\n"); for(i=0;i<=10;i++) { Pop(q); } printf("----------------------------------"); //取队顶元素 printf("\n###########取队顶元素###########\n"); Top(q); printf("----------------------------------"); // //销毁队 // printf("\n###########销毁队###########\n"); // Push(q,10); // Destroy(q); // Top(q);}
设置一个flag的方法,用flag区分队空与非空
#include<stdbool.h>#define maxsize 10typedef int datatype;//定义队的结构体struct queue{ datatype data[maxsize]; int front; int rear; int flag; //flag=0时队空,flag=1时队非空};typedef struct queue Queue;//初始化队void init(Queue *q){ q->front=q->rear=0; q->flag=0;}//判断是否为空//这里有两种方法//先实现牺牲一个存储空间的方法,即rear始终指向空bool Empty(Queue *q){ if(q->flag==0) { return true; } else { return false; }}//判断是否满bool full(Queue *q){ if(!Empty(q)&&q->rear==q->front) { return true; } else { return false; }}//入队void Push(Queue *q,datatype element){ if(!full(q)) { q->data[q->rear]=element; q->rear=(q->rear+1)%maxsize; q->flag=1; } else { printf("队满!\n"); }}//出队void Pop(Queue *q){ if(!Empty(q)) { q->front=(q->front+1)%maxsize; if(q->front==q->rear) { q->flag=0; } } else { printf("队空\n"); }}//取队顶元素datatype Top(Queue *q){ if(!Empty(q)) { return q->data[q->front]; } else { printf("队空\n"); }}
或者这里把flag改为队长,那么方法简单,在每次入队时加一个元素,出队时减一个元素
0 0
- C语言实现队(循环队列)
- 循环队列C语言实现
- c语言实现循环队列
- C语言实现循环队列
- C语言实现循环队列
- C语言实现循环队列
- 数据结构(C语言)实现循环队列
- 循环队列的实现(C语言)
- 数据结构C语言实现之循环队列
- 数据结构.循环队列(C语言实现)
- c语言循环线性队列的实现
- 数据结构:循环队列(C语言实现)
- 循环队列的实现(C语言)
- 顺序循环队列的c语言实现
- 数据结构:循环队列(C语言实现)
- 数据结构C语言实现之循环队列
- C语言-循环队列的简单实现
- 数据结构之---C语言实现循环队列
- Python3.4安装lxml、selenium、pyquery
- meta标签详解
- Sublime Text 3 如何修改默认快捷键
- NNU_20161103_5PAT1057. 数零壹
- EMCA和DB的恩怨
- C语言实现队(循环队列)
- JS读取INI文件
- route命令详解与使用实例
- xshell和xftp终端工具推荐
- 虚拟币交易平台源码修改 二次开发 btchanges 增加充值3级奖励分红功能
- 2016.11.29 有阻
- 关于Hive数据仓库的那些事儿(一)模式设计
- 代码整洁之道学习总结(1)------有意义的命名
- Spark on Yarn