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

代码如下:

#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. ExtJS使用入门

    extjs是基于 yui 由 jack slocum开发, sencha是他们的公司, sencha是由三个项目合并起来的开源项目: ExtJS, jqTouch, Raphael(拉斐尔, 圣经中的 ...

  2. luogu P1880石子归并

    石子归并 luogu1880 传送门   noi1995 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 ...

  3. ns-3 NetAnim遇到了一个问题

    安装好了 NetAnim 之后,使用NS3原有例子 third.cc ,在 Simulator::run() 前面添加如下语句: AnimationInterface anim("third ...

  4. js文字转移效果

    这个例子算是有点样子的. 思路: 字符串操作.左框里面先是预设的.点击按钮时截取左框中的字符串的前一个字符到右框里的字符串后面,以此循环.点击按钮时按钮变为灰色,在循环完成后恢复.计数的总数(右边)是 ...

  5. UVa 10003 切木棍(区间DP+最优矩阵链乘)

    https://vjudge.net/problem/UVA-10003 题意: 有一根长度为L的棍子,还有n个切割点的位置.你的任务是在这些切割点的位置处把棍子切成n+1部分,使得总切割费用最小.每 ...

  6. urljoin

    from urlparse import urljoin urljoin("http://www.asite.com/folder/currentpage.html", " ...

  7. Cocos2d-x学习笔记(七)菜单

    菜单类继承关系如下: 图1 菜单类继承关系 文本菜单只能显示文本,包括:MenuItemLabel.MenuItemFont和MenuItemAtlasFont: #include "Hel ...

  8. Python matplot的使用(一)

    其实,使用它的直接原因是因为matlab太大了,不方便.另外,就是它是免费的. 在安装这个库的时候,会需要安装一些它所依赖的库,比如six等.从sourceforge上下载,只需按照提示安装完成就行了 ...

  9. gcc 编译出现 internal compiler error: Killed

    系统没有交换分区, 编译过程中内存耗尽, 导致了编译中断 …解决方式也很简单, 就是增加一个交换分区:       创建分区文件, 大小 2G dd if=/dev/zero of=/swapfile ...

  10. 《Robot Framework自动化测试修炼宝典》道长

    1. Python下载https://www.python.org/downloads 2. Setuptools下载https://pypi.python.org/pypi/setuptools用原 ...