循环队列 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 ...
随机推荐
- 《EMCAScript6入门》读书笔记——23.Module的加载实现
- orm框架综合
一, 目前ORM框架的产品非常之多,除了个大公司.组织的产品外,其他一些小团队也在推出自己的ORM框架.目前流行的ORM框架有如下这些产品: (1)Enitiy EJB:Enitiy EJB实际上也是 ...
- HDU 6121 Build a tree(完全K叉树)
http://acm.hdu.edu.cn/showproblem.php?pid=6121 题意:给你一颗完全K叉树,求出每棵子树的节点个数的异或和. 思路: 首先需要了解一些关于完全K叉树或满K叉 ...
- python 压缩tar 包
import tarfile import os def make_targz(output_filename, source_dir): print("doing!") with ...
- JS中dataTransfer对象在拖曳操作中的妙用。
转载 原文 https://my.oschina.net/jiangli0502/blog/179197 dataTransfer对象提供了对于预定义的剪贴板格式的访问,以便在拖曳操作中使用. 通 ...
- django QueryDict对象
类的原型:class QueryDict[source] 在HttpRequest对象中,GET和POST属性都是一个django.http.QueryDict的实例.也就是说你可以按本文下面提供的方 ...
- Activity生命周期之我见
关于Activity生命周期的文章很多,而且大部分也说得很详细,所以作为关于这方面的内容我本来不想多说,但是大家可能跟我之前一样,在看这方面的内容的时候都能很容易地看懂,但是过几天又忘了,或者在用的程 ...
- 2018年全国多校算法寒假训练营练习比赛(第一场)E 恋与程序员
https://www.nowcoder.com/acm/contest/67/E 思路: dfs 代码: #include<bits/stdc++.h> using namespace ...
- php 8小时时间差的解决方法小结
原来从php5.1.0开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的 也就是显示的时间(无论用什么php命令)都是格林威治标准时间 和我们的时间(北京时间)差了正好 ...
- WPF样式——经典博客
WPF样式博客:http://www.cnblogs.com/luluping/archive/2011/05/06/2039498.html