循环队列 c 实现!!!!
上数据结构课的时候老师让写了一个循环队列子系统。
代码如下:
#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 实现!!!!的更多相关文章
- C++数组实现的循环队列
#include<iostream> #include <string> /* 功能:数组实现的循环队列,C++实现,学习参考 */ using namespace std; ...
- C ~ 链式队列与循环队列
此处的链式与循环队列可以应用于BFS和树的层序遍历.下面是对其结构和基本操作的程序描述. 1.循环队列 解决循环队列的队空和队满的方法: [1].增加一个参数count,用来记录数组中当前 ...
- 数据结构算法C语言实现(十二)--- 3.4循环队列&队列的顺序表示和实现
一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 //3_4_part1.h /** ...
- 使用 JavaScript 实现基本队列、优先队列和循环队列
1.基本队列的实现 基本队列的方法中,包含了 ①向队列(尾部)中添加元素(enqueue).②(从队列头部)删除元素(dequeue).③查看队列头部的元素(front).④查看队列是否为空(isEm ...
- Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列
Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...
- 循环队列+堆优化dijkstra最短路 BZOJ 4152: [AMPPZ2014]The Captain
循环队列基础知识 1.循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2.循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零: (2)当队列不为空时,fr ...
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例
1 队列的基本概念 队列(Queue):也是运算受限的线性表.是一种先进先出(First In First Out ,简称FIFO)的线性表.只允许在表的一端进行插入,而在另一端进行删除. 队首(fr ...
- 《Java数据结构与算法》笔记-CH4-5不带计数字段的循环队列
第四章涉及三种数据存储类型:栈,队列,优先级队列 1.概括:他们比数组和其他数据存储结构更为抽象,主要通过接口对栈,队列和优先级队列进行定义.这些 接口表明通过他们可以完成的操作,而他们的主要实现机制 ...
- 《Java数据结构与算法》笔记-CH4-4循环队列
/** * 循环队列 */ class Queue { private int maxSize; private long[] queue; private int front; private in ...
随机推荐
- 终于在nowcoder爆发了的懒惰
题目 这类题目我实在忍不了了 Emma,随便做个nowcode比赛题吧,我在oj上也没找到 题意 求\(\sum_{L=1}^{n}\sum_{R=i}^{n}a[k](L<=k<=R)\ ...
- 3D CNN for Video Processing
3D CNN for Video Processing Updated on 2018-08-06 19:53:57 本文主要是总结下当前流行的处理 Video 信息的深度神经网络的处理方法. 参考文 ...
- 从nodejs到在线商城
nodejs安装express开发框架 (开发环境:mkdir nodeshop && cd nodeshop > npm init > npm install expre ...
- UVa 820 因特网带宽(最大流)
https://vjudge.net/problem/UVA-820 题意: 给出所有计算机之间的路径和路径容量后求出两个给定结点之间的流通总容量. 思路: 裸的最大流问题.注意有个比较坑的地方,最后 ...
- 基于R进行相关性分析--转载
https://www.cnblogs.com/fanling999/p/5857122.html 一.相关性矩阵计算: [1] 加载数据: >data = read.csv("231 ...
- python ros 关闭节点
def myhook(): print "shutdown time!" rospy.on_shutdown(myhook) 或 rospy.signal_shutdown(rea ...
- TeamViewer 说明截图
- LeetCode--028--实现strSTR()
问题描述: 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返回 -1. 示例 ...
- LeetCode--027--移除元素
问题描述: 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间 ...
- memcached客户端连接建立过程笔记
memcached在启动过程初始化server_sockets时,根据启动参数决定系统是进行tcp监听还是udp监听,这里暂时只关注tcp的情况. server_socket在初始化时会向系统申请监听 ...