上数据结构课的时候老师让写了一个循环队列子系统。

代码如下:

#include<stdio.h>
#include<malloc.h>
#define MAXLEN 100
#define datatype char typedef struct //循环队列结构体
{
datatype data[MAXLEN];
int rear,front,n; //rear对尾位置,front队首位置,n队列中元素个数;
} csequeue;
csequeue *line; //一个csequeue类型的指针;
void inqueue() //进队;
{
char x;
if(line==NULL) //如果指针为空
{
line=(csequeue*)malloc(sizeof(csequeue)); //创建一个结构体
line->rear=line->front=1; //对rear,front,n初始化,==1可以是一个在MAXLEN范围内的任意值
line->n=0;
}
printf("\t请输入进队元素:");
scanf(" %c",&x);
if(line->front ==(line->rear + 1) % MAXLEN) //判断队满,原理:队尾元素加1等于队首元素的时候判定为队满
{
printf("\t队满,进队失败!");
return ;
}
line->rear=(line->rear+1)% MAXLEN; //队尾标记加一
line->data[line->rear]=x; //给队尾元素赋值
line->n++; //队列长度加一
printf("\t进队成功!!");
}
void dequeue () //出队
{
if(line==NULL||line->rear==line->front) //判断,如果指针为空,或者队空的情况;
{
printf("\t队空,出队失败!");
return ;
}
line->front=(line->front+1)%MAXLEN; //因为front所指位置元素不属于队列,所以先加后输出
printf("\t出队元素为:%c",line->data[line->front]);
line->n--;
}
void showqueue () //显示队列;
{
int i;
if(line==NULL||line->rear==line->front)
{
printf("\t队空!!!!");
return ;
}
i=line->front;
printf("\t队列元素为:");
while(i!=line->rear) //当标记变量i不等于队尾位置时,line->data中(i+1)%MAXLEN元素,因为一开始front所指元素不属于队列
{
printf(" %c",line->data[(i+1)%MAXLEN]);
i=(i+1)%MAXLEN; //对MAXLEN取余使得i的值始终在零到MAXLEN范围内;
}
}
void queuelength() //显示队列长度;
{
if(line==NULL)
{
printf("\t无队,请先创建队!");
return ;
}
printf("\t队列长度为:%d",line->n);
}
void returnn()
{
free(line); //释放队列==释放空间;
return ;
}
int main ()
{
int m=1;
printf("\t\t\t----循环队列子系统c实现----\n\n");
while(m!=0)
{
printf("\n\t\t******************************************\n");
printf("\t\t* 指令说明 *\n");
printf("\t\t* 1----进 队 *\n");
printf("\t\t* 2----出 队 *\n");
printf("\t\t* 3----显 示 *\n");
printf("\t\t* 4----队列长度 *\n");
printf("\t\t* 0----返 回 *\n");
printf("\t\t******************************************\n\n");
printf("\t请输入指令:");
scanf(" %d",&m);
switch(m)
{
case 1:
inqueue();
break;
case 2:
dequeue();
break;
case 3:
showqueue();
break;
case 4:
queuelength();
break;
case 0:
returnn();
return 0;
default :
printf("\t输入有误!请重新输入~\n\n");
break;
}
}
return 0;
}

循环队列 c 实现!!!!的更多相关文章

  1. C++数组实现的循环队列

    #include<iostream> #include <string> /* 功能:数组实现的循环队列,C++实现,学习参考 */ using namespace std; ...

  2. C ~ 链式队列与循环队列

          此处的链式与循环队列可以应用于BFS和树的层序遍历.下面是对其结构和基本操作的程序描述. 1.循环队列 解决循环队列的队空和队满的方法: [1].增加一个参数count,用来记录数组中当前 ...

  3. 数据结构算法C语言实现(十二)--- 3.4循环队列&队列的顺序表示和实现

    一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 //3_4_part1.h /** ...

  4. 使用 JavaScript 实现基本队列、优先队列和循环队列

    1.基本队列的实现 基本队列的方法中,包含了 ①向队列(尾部)中添加元素(enqueue).②(从队列头部)删除元素(dequeue).③查看队列头部的元素(front).④查看队列是否为空(isEm ...

  5. Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列

    Atitit.提升软件稳定性---基于数据库实现的持久化  循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...

  6. 循环队列+堆优化dijkstra最短路 BZOJ 4152: [AMPPZ2014]The Captain

    循环队列基础知识 1.循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2.循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零: (2)当队列不为空时,fr ...

  7. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  8. javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例

    1 队列的基本概念 队列(Queue):也是运算受限的线性表.是一种先进先出(First In First Out ,简称FIFO)的线性表.只允许在表的一端进行插入,而在另一端进行删除. 队首(fr ...

  9. 《Java数据结构与算法》笔记-CH4-5不带计数字段的循环队列

    第四章涉及三种数据存储类型:栈,队列,优先级队列 1.概括:他们比数组和其他数据存储结构更为抽象,主要通过接口对栈,队列和优先级队列进行定义.这些 接口表明通过他们可以完成的操作,而他们的主要实现机制 ...

  10. 《Java数据结构与算法》笔记-CH4-4循环队列

    /** * 循环队列 */ class Queue { private int maxSize; private long[] queue; private int front; private in ...

随机推荐

  1. 使用CCleaner卸载chrome

    Google Chrome Update Patches Zero-Day Actively Exploited in the Wild 如果有同事使用google Chrome浏览器的话,请检查版本 ...

  2. yarn虚拟cpu和虚拟内存

    虚拟cpu 虚拟的cpu代码并发数,如果一个container拥有2个vcpu,那么该container就可以真正的在同一时间运行两个线程,而不是靠切时间片而达到的逻辑并发.所以一般虚拟的cpu需要和 ...

  3. com.mysql.jdbc.PacketTooBigException,及mysql 设置 max_allow_packet

    本文为博主原创,未经允许不得转载: 在进行批量导入表格数据入库操作时,报了以下错误: 错误分析: mysql根据配置文件会限制server接受的数据包大小.有时候大的插入和更新会受max_allowe ...

  4. 【Cuda编程】加法归约

    目录 cuda编程并行归约 AtomicAdd调用出错 gpu cpu下时间计算 加法的归约 矩阵乘法 矩阵转置 统计数目 平方和求和 分块处理 线程相邻 多block计算 cuda编程并行归约 At ...

  5. 使用u盘重装双系统中的乌班图

    之前的乌班图被我玩坏了,故而想重装一个.由于之前的双系统是同学帮我装的,我便到网上找各种资料,鼓弄了一天,终于完事了.把过程记录一下. window10 64bit ubuntu 14.04 desk ...

  6. python os.system command_line

    command_line = ("{7} {0} -Xmx{1} -jar {2} -T Pileup -R {3} -I {4} -L {5} -o {6} " + " ...

  7. Linux 普通用户拿到root权限及使用szrz命令上传下载文件

    1.如何拿到root权限 在shell里如果看到你的命令输入行最前面显示的是 $符号,说明目前账号只有系统的普通权限. 输入:sudo su 这时能看到shell的输入行最前面已经显示的是#号,说明已 ...

  8. 提高Intellij创建Maven工程的速度

    按照默认的方式创建Maven工程的时候会发现Maven插件加载的很慢如下 解决方法:在创建的过程中,在Properties中添加一个参数archetypeCatalog=internal . 因为ar ...

  9. cannot marshal None unless allow_none is enabled

    今天运行一个launch文件的时候出现了以下报错 load_parameters: unable to set parameters (last param was [/robot_state_pub ...

  10. MarkChanges: Jmeter

    1. 20180627 调整启动的内存set HEAP=-Xms1024m -Xmx1024m2. 20180627 调整输出格式为xml #jmeter.save.saveservice.outpu ...