C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1、数据结构-循环队列的实现-C语言
#define MAXSIZE 100
//循环队列的存储结构
typedef struct
{
int* base; //基地址
int _front; //头指针
int _rear; //尾指针
} SqQueue;
//构造空队列---1
void InitQueue(SqQueue* Q);
//队列的销毁---2
void DestroyQueue(SqQueue* Q);
//队列的清空---3
void ClearQueue(SqQueue* Q);
//判断队列是否为空---4
void QueueEmpty(SqQueue Q);
//队列的长度---5
int QueueLength(SqQueue Q);
//取队列头元素---6
void GetHead(SqQueue Q);
//插入---7
void EnQueue(SqQueue* Q, int value);
//删除---8
void DeQueue(SqQueue* Q,int* value);
//依次访问队列元素---9
void QueueTraverse(SqQueue Q);
void ShowHelp();
//-----------------------------------------------
void ShowHelp()
{
printf("1---初始化循环队列\n");
printf("2---销毁循环队列\n");
printf("3---清空循环队列\n");
printf("4---判断循环队列是否为空\n");
printf("5---循环队列长度\n");
printf("6---循环队列头元素\n");
printf("7---插入\n");
printf("8---删除\n");
printf("9---依次访问循环队列元素\n");
}
void InitQueue(SqQueue* Q)
{
Q->base = (SqQueue*) malloc(MAXSIZE*sizeof(SqQueue));
if(!Q->base)
{
printf("分配失败.\n");
return;
}
Q->_rear = 0;
Q->_front = 0;
}
void DestroyQueue(SqQueue* Q)
{
free(Q->base);
Q->_rear = 0;
Q->_front = 0;
}
void ClearQueue(SqQueue* Q)
{
//并不需要free占值的空间,因为就是不free,本身分配的也有空间。都是占着的。
Q->_rear = 0;
Q->_front = 0;
}
void QueueEmpty(SqQueue Q)
{
if(Q._rear == Q._front)
printf("此队列为空。\n");
else
printf("此队列不为空。\n");
}
int QueueLength(SqQueue Q)
{
return (Q._rear-Q._front+MAXSIZE)%MAXSIZE;
}
void GetHead(SqQueue Q)
{
if(Q._rear == Q._front)
{
printf("此队列为空。\n");
return;
}
int* middle = Q.base;
middle += Q._front;
printf("此队列头元素为%d。\n",*middle);
}
void EnQueue(SqQueue* Q, int value)
{
if(((Q->_rear+1)%MAXSIZE) == Q->_front)
{
printf("队列中元素已满,不能再继续添加.\n");
return;
}
int* middle = Q->base;
middle += Q->_rear;
*(middle) = value;
Q->_rear = (Q->_rear+1)%MAXSIZE;
printf("插入成功\n");
}
void DeQueue(SqQueue* Q,int* value)
{
if(Q->_rear == Q->_front)
{
printf("队列中无元素,不能再进行出队列操作.\n");
return;
}
int* middle = Q->base;
middle += Q->_front;
*value = *(middle);
Q->_front = (Q->_front+1)%MAXSIZE;
printf("删除成功\n");
}
void QueueTraverse(SqQueue Q)
{
if(Q._rear == Q._front){
printf("此队列为空。\n");
return;
}
int* middle = Q.base;
middle += Q._front;
int num = 1;
for(int i=0;i<((Q._rear-Q._front+MAXSIZE)%MAXSIZE);i++){
printf("第%d个元素值为:%d\n",num,*(middle+i));
num++;
}
}
C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作的更多相关文章
- C语言数据结构-单链表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-单链表的实现-C语言 typedef struct LNode { int data; struct LNode* next; } LNode,*LinkList; //这两者等价.Li ...
- C语言实现循环队列的初始化&进队&出队&读取队头元素&判空-2
/*顺序表实现队列的一系列操作(设置flag标志不损失数组空间)*/ #include<stdio.h> #include<stdlib.h> #define Queue_Si ...
- C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...
- C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...
- c语言数据结构:用标志位实现循环队列
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 10//定义队列长度 ;//定义标志位 typedef struct ...
- C语言数据结构——第三章 栈和队列
三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性 ...
- C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...
- Java数据结构——循环队列
普通顺序队列存在的问题在普通顺序队列中,入队的操作就是先将尾指针rear右移一个单位,然后将元素值赋值给rear单位.出队时,则是头指针front后移一个单位.像这样进行了一定数量的入队和出队操作后, ...
- C语言数据结构基础学习笔记——栈和队列
之前我们学过了普通的线性表,接下来我们来了解一下两种特殊的线性表——栈和队列. 栈是只允许在一端进行插入或删除的线性表. 栈的顺序存储结构也叫作顺序栈,对于栈顶指针top,当栈为空栈时,top=-1: ...
随机推荐
- sass和less、stylus语法(2)
6.运算符(Operations)CSS预处理器语言还具有运算的特性,其简单的讲,就是对数值型的Value(如:数字.颜色.变量等)进行加减乘除四则运算.这样的特性在CSS样式中是想都不敢想的,但在C ...
- Oracle OCM提纲
ocm提纲 数据库创建详解 ◆ 通过手动方式创建数据库 环境变量的设置 密码文件的创建过程以及使用情景 Oracle数据库中参数文件的演进过程 参数文件的对比 参数的修改方式介绍 数据库启动过程时的内 ...
- Linux打包下载命令
语法:tar [主选项+辅选项] 文件或者目录使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用. 主选项: c 创建新的档案文件.如果用户想备份一个目录或是一些 ...
- AllowsTransparency和WebBrowser兼容性问题解决方案
AllowsTransparency和System.Windows.Controls.WebBrowser兼容性问题,能看这篇文章,所以原因也不用多说:最根本的就是因为MS对win32底层的WebBr ...
- 系统监控磁盘分区 homework
作业一: 1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分 ...
- IT求职经验分享
本来这些东西应该早点写出来,之前由于一些事情的顾虑迟迟没有发表下笔整理并发表出来.最近及接下来的日子是校招找工作的关键时期,结合自己之前找暑期实习的过程及笔试面试经历(主要是三家,腾讯.360.绿盟科 ...
- jdbcTemplate学习(一)
概述 Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDBC模板类是第一种工作模式. JdbcTe ...
- 安卓如何将TXT文件写到特定路径
其实就一个方法,就不贴所有代码了. /** * 写入文件方法 * @param content */ public static void write(String content) { try { ...
- 【转载】eclipse如何传递main参数
转自:http://blog.csdn.net/theblackbeard/article/details/52172048 在命令行窗口可以通过java +程序名 +参数1(空格)参数2(空格).. ...
- 蓝桥杯【入门训练】 Fibonacci数列
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...