循环队列 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 ...
随机推荐
- cmder的使用和编码问题解决
cmder 是一款 windows 下的命令集合软件,它可以集合各种系统下的命令,并且操作非常快速方便.安装有两个版本,一个是简化版(4.27M),一个是完全版(75.7M),它们的唯一区别:完全版包 ...
- hdu 6444 Neko's loop 单调队列优化DP
Neko's loop Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 机器学习-数据可视化神器matplotlib学习之路(一)
直接上代码吧,说明写在备注就好了,这次主要学习一下基本的画图方法和常用的图例图标等 from matplotlib import pyplot as plt import numpy as np #这 ...
- DataSet 动态添加列
public DataSet GetNewId(List<string> IdArr) { DataSet ds = new DataSet(); DataTable newtb = ne ...
- React Native 之 定义的组件 (跨文件使用)
哈哈的~~~今天介绍的是自定义组件 然后去使用这个组件,让这个组件传递这各种文件之间 哈哈 下面开始吧!!!! 我们所要创建的是一个自定义的Button,先创建一个js文件起名为MyButton, ...
- C#学习 day1 c#基础
C#是一门编程语言,为什么我今天开始学C#了,下学期有门C#的课,以及有一个经验丰富的老学长正在做C#项目,由于之前学过C++和C基础,所以,C#的基础部分我查看文档来尝试能否自学归纳,而不是一直依靠 ...
- c++ primer plus 第五章 课后题答案
#include <iostream> using namespace std; int main() { ; cout << "Please enter two n ...
- Codeforces 388A - Fox and Box Accumulation
388A - Fox and Box Accumulation 思路: 从小到大贪心模拟. 代码: #include<bits/stdc++.h> using namespace std; ...
- R语言plot函数参数合集
最近用R语言画图,plot 函数是用的最多的函数,而他的参数非常繁多,由此总结一下,以供后续方便查阅. plot(x, y = NULL, type = "p", xlim = N ...
- Elections CodeForces - 1020C (贪心)
大意: 有n个选民, m个党派, 第i个选民初始投$p_i$一票, 可以花费$c_i$改变投票, 求最少花费使得第一个党派的票数严格最大 假设最终第一个党派得票数$x$, 枚举$x$, 则对于所有票数 ...