切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
CMS系统
服务器
频道导航
▸ PHP
▸ Java
▸ Java SE
▸ Python
▸ C#
▸ C&C++
▸ Ruby
▸ VB
▸ asp.Net
▸ Go
▸ Perl
▸ netty
▸ Django
▸ Delphi
▸ Jsp
▸ .NET Core
▸ Spring
▸ Flask
▸ Springboot
▸ SpringMVC
▸ Lua
▸ Laravel
▸ Mybatis
▸ Asp
▸ Groovy
▸ ThinkPHP
▸ Yii
▸ swoole
▸ HTML
▸ HTML5
▸ JavaScript
▸ CSS
▸ jQuery
▸ Bootstrap
▸ Angularjs
▸ TypeScript
▸ Vue
▸ Dojo
▸ Json
▸ Electron
▸ Node.js
▸ extjs
▸ Express
▸ XML
▸ ES6
▸ Ajax
▸ Flash
▸ Unity
▸ React
▸ Flex
▸ Ant Design
▸ Web前端
▸ 微信小程序
▸ 微信公众号
▸ iOS
▸ Android
▸ Swift
▸ Hybrid
▸ Cocos2d-x
▸ Flutter
▸ Xcode
▸ Silverlight
▸ cocoa
▸ Cordova
前端之家
数据结构
《数据结构》严蔚敏.吴伟民P63-65.循环队列
《数据结构》严蔚敏.吴伟民P63-65.循环队列
2019-05-09
数据结构
前端之家
前端之家
收集整理的这篇文章主要介绍了
《数据结构》严蔚敏.吴伟民P63-65.循环队列
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
502
_0@
///dabbysunshine@qq.com /** 《数据结构》严蔚敏.吴伟民P63-65.循环队列 **/ ///如有BUG,请发
邮件
联系 #include "st
dio
.h" #include "stdlib.h" #include "string.h" //#include "malloc.h" //#include <iostream> //using namespace std; ///============================================================================= struct StudentRecord { char* Name; int Number; }; void InitRecord(StudentRecord &record) { record.Name = NULL; record.Number = 0; } void SetRecord(StudentRecord &record,char* name,int number) { if(record.Name != NULL) { free(record.Name); record.Name = NULL; } record.Name = (char*)malloc(strlen(name) + 1); strcpy(record.Name,name); record.Number = number; } void DestoryRecord(StudentRecord &record) { if(record.Name != NULL) { free(record.Name); record.Name = NULL; } record.Number = 0; } void PrintRecord(StudentRecord &record) { printf("%s,%d/n",record.Name,record.Number); } ///============================================================================= #define MAXQSIZE 6 struct SqQueue { StudentRecord *base; int front; int rear; }; void InitQueue(struct SqQueue &Q) { ///构造一个空队列Q Q.base = (StudentRecord*)malloc(MAXQSIZE*sizeof(StudentRecord)); if(!Q.base) { puts("储存分配失败!"); exit(0); } Q.rear = Q.front = 0; } bool EnQueue(struct SqQueue &Q,StudentRecord record) { ///插入新的队尾元素record if((Q.rear + 1)%MAXQSIZE == Q.front) { puts("队已满."); return false; } SetRecord(Q.base[Q.rear],record.Number); Q.rear = (Q.rear+1)%MAXQSIZE; return true; } bool DeQueue(struct SqQueue &Q,StudentRecord &record) { ///队列非空条件下,
删除
队头元素 if(Q.front == Q.rear) { puts("队列为空."); return false; } SetRecord(record,Q.base[Q.front].Name,Q.base[Q.front].Number); Q.front = (Q.front+1)%MAXQSIZE; return true; } /**
调用
指针
函数
输出
队列**/ typedef void(*Func)(StudentRecord &record); /**指针实现**/ /*void QueueTraverse(SqQueue &Q,Func visit) { int cur = Q.front; StudentRecord *p = Q.base; if(Q.front == Q.rear) { puts("队列为空."); } else { while((Q.rear)%MAXQSIZE != cur) { visit(*p); p++; cur = (cur + 1)%MAXQSIZE; } } }*/ /**非指针实现**/ void QueueTraverse(struct SqQueue &Q,Func visit) { int cur = Q.front; if(Q.front == Q.rear) { puts("队列为空."); } else { while(cur != (Q.rear)%MAXQSIZE) { visit(Q.base[cur]); cur = (cur + 1)%MAXQSIZE; } } } void DestoryQueue(struct SqQueue &Q) { QueueTraverse( Q,DestoryRecord); /**
调用
指针
函数
摧毁队列中元素**/ free(Q.base); Q.base = NULL; Q.front = Q.rear = 0; } int main(void) { StudentRecord record; StudentRecord record0; StudentRecord record1; StudentRecord record2; StudentRecord record3; InitRecord(record); InitRecord(record0); InitRecord(record1); InitRecord(record2); InitRecord(record3); SetRecord(record0,"NYJ",100); SetRecord(record1,"CLF",101); SetRecord(record2,"LQJ",102); SetRecord(record3,"ZCY",103); struct SqQueue Q; InitQueue(Q); printf("/nQueue part 1:/n"); EnQueue(Q,record0); EnQueue(Q,record1); EnQueue(Q,record2); EnQueue(Q,record3); puts("
生成
的队列为:"); QueueTraverse(Q,PrintRecord); printf("/nQueue part 2:/n"); DeQueue( Q,record); puts("
删除
的队头元素为:"); PrintRecord(record); puts("
删除
队头元素后的队列为:"); QueueTraverse(Q,PrintRecord); printf("/nQueue part 3:/n"); puts("摧毁队列:"); DestoryQueue(Q); QueueTraverse(Q,PrintRecord); return 0; }
@H_
404
_3@ @H_
502
_0@
代码
如有问题,欢迎发
邮件
dabbysunshine@qq.com
咨询@H_
404
_3@
原文链接:/datastructure/383267.html
上一篇:【数据结构】二叉树基本操作的程序
下一篇:【数据结构】详解Linux内核之双向循
猜你在找的数据结构相关文章
【数据结构】键树
键树的基本概念 键树又称数字查找树(Digital Search Tree)。 它是一棵度大于等于2的树,...
作者:前端之家 时间:2021-02-09
【数据结构】绪论
[TOC] 基本概念 数据: 数据 是对客观事物的符号表示,在计算机科学中指所有能输入到计算机...
作者:前端之家 时间:2021-02-09
【数据结构】证明法
[TOC] 反证法 基本概念: 一般地,假设原命题不成立(即 在原命题的条件下,结论不成立),...
作者:前端之家 时间:2021-02-09
数据结构与算法系列之目录
最近抽空整理了"数据结构和算法"的相关文章。在整理过程中,对于每种数...
作者:前端之家 时间:2021-02-09
【数据结构】数组
[TOC] 矩阵在计算机图形学、工程计算中占有举足轻重的地位。在数据结构中考虑的是如何用最...
作者:前端之家 时间:2021-02-09
[操作系统]操作系统中断机制
1.当中断发生时,cpu立即进入核心态 2.当中断发生后,当前进程进入暂停状态,操作系统内核...
作者:前端之家 时间:2021-02-06
[日常] 浏览器前进后退与数据结构的思想
一张图保存一下 红点是当前地址 白色箭头是新打开页面 黑色箭头是后退页面 栈的思想 , 后退...
作者:前端之家 时间:2021-02-06
[算法] 开放寻址法解决哈希冲突方式
开放寻址法:又称开放定址法,当哈希冲突发生时,从发生冲突的那个单元起,按照一定的次序...
作者:前端之家 时间:2021-02-06
二叉树的基本概念介绍与代码实现(多图+代码)
@ 树的基本概念 图1 树的结点 结点:使用树结构存储的每一个数据元素都被称为“结点”。例...
作者:前端之家 时间:2021-01-30
史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言)
1.准备工作 首先包含头文件,定义链表结构体,产生随即链表的范围,定义全局头尾节点。 #i...
作者:前端之家 时间:2021-01-30
编程分类
Linux
Windows
CentOS
Ubuntu
Nginx
WebService
Scala
Memcache
Apache
Redis
Docker
Bash
Azure
Tomcat
LNMP
Shell
数据结构
服务器运维
网络安全
最新文章
• 【数据结构】键树
• 【数据结构】绪论
• 【数据结构】证明法
• 数据结构与算法系列之目录
• 【数据结构】数组
• 【数据结构】时间复杂度
• [操作系统]操作系统中断机
• [日常] 浏览器前进后退与数
• [算法] 开放寻址法解决哈希
• 二叉树的基本概念介绍与代
热门标签
更多 ►
xebug
nodemon
docker-copy
dcos
elasticsearc
windows-cont
docker-windo
docker-aws
amazon-cloud
envoyproxy
hashicorp-va
swisscomdev
kafka-python
zscaler
photon-os
docker-swarm
kamon
google-cloud
concourse
wso2-am
persistent-v
api-manager
process-mana
manjaro
jenkins-work
hypriot
remoteapi
keystonejs
bitcoind
bitcoin-test