数据结构C语言实现----出队伍操作
1.创建一个队列时,空队列中队首和队尾相同,但不是NULL,队首后面挂的元素才是NULL
2.打印队列时,对于链队列,不能把指针加一来找到下一个数据,因为链表地址不连续,需要复制一条链表,不断往后遍历来挨个打印链表的数据
3.求队伍的长度也是,不能首尾指针相减,因为地址不连续,所以同样需要复制一条链表,通过遍历来求长度
代码如下:
#include<stdlib.h>
#include<stdio.h>
/*************************************
* 出队列操作
* 队首(头指针)---元素1----元素2---元素3---.....
* 将队首指向元素2,释放掉元素1
* 注意1:队列原本为空队列,直接返回
* 注意2:释放掉第一个元素后,队列变为空队列,别忘了让队尾 = 队首
* ***************************************************************/
//typedef char ElemType;
typedef struct QNode
{
char date;
struct QNode *next;
}QNode , *QueuePtr;
typedef struct
{
QueuePtr front , rear;
}LinkQueue;
/////////////////////////////////////////////////////////////////////
//创建一个队列
void initQueue(LinkQueue *q)
{
q->front = q->rear = (QueuePtr)malloc(sizeof(QNode));
if (!q->front)
{
exit(0);
}
q->front->next = NULL;//这时头结点后面连接的是NULL,但本身不是NULL
}
/////////////////////////////////////////////////////////////////////
//入队列操作
void EnQueue(LinkQueue *q , char e)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
if (!q->front)
{
exit(0);
}
p->date = e;
p->next = NULL;
q->rear->next = p;
q->rear = p;
}
////////////////////////////////////////////////////////////////////
//出队列操作
void DeQueue(LinkQueue *q , char *e)
{
if (q->front == q->rear)//判断是否为空队列
{
return;
}
QueuePtr p;
p = q->front->next;
*e = p->date;
q->front->next = p->next;
if (q->rear == p)
{
q->front = q->rear;
}
free(p);
}
/////////////////////////////////////////////////////////////////////
//计算队列长度
int LenLinkQueue(LinkQueue *q)
{
int len,i;
QueuePtr p = q->front->next;
for (i = 0; p!=NULL;i++)
{
p = p->next;
}
return i;
} int main()
{
LinkQueue q;
char e;
//创建队列
initQueue(&q);
printf("队列创建中,请稍后...\n队列创建成功!\n");
//入队列操作
printf("请输入要插入队列的字符:");
while ((e = getchar())!= '\n')
{
if (e!='\n')
{
EnQueue(&q , e);
}
}
//打印队列
printf("插入成功,正在打印队列字符...\n");
printf("当前队列为:");
int len = LenLinkQueue(&q);//队伍长度
QueuePtr p = q.front->next;//链表不同于顺序表,地址不连续,所以不能通过指针的增减来打印,需要复制一个链表遍历
for (size_t i = 0;i<len ; i++)
{
printf("%c" , p->date);
p = p->next;
}
putchar('\n');
//出队伍
printf("请输入需要几个元素从队首出队列:");
int n;
scanf("%d",&n);
while (n)
{
DeQueue(&q , &e);
printf("%c已从队首出队列\n" ,e);
n--;
}
//打印队伍
printf("插入成功,正在打印队列字符...\n");
printf("当前队列为:");
p = q.front->next;
for (size_t i = 0;i<len ; i++)
{
printf("%c" , p->date);
p = p->next;
}
putchar('\n');
return 0;
}
运行结果:
数据结构C语言实现----出队伍操作的更多相关文章
- 数据结构C语言实现----出栈操作
代码如下: #include<stdio.h> #include<stdlib.h> typedef struct { char *base; char *top; int s ...
- 数据结构--Java语言描述
本篇文章是为了记录自己在学习数据结构时的笔记,会对常见的数据结构做基本的介绍以及使用Java语言进行实现.包括 动态数组 栈 队列 链表 二分搜索树 优先队列和堆 线段树 Trie树 并查集 AVL树 ...
- 数据结构(c语言第2版)-----了解链表,栈,队列,串
关于链表我觉得这都是最基本的东西,但是不常见,在实际的应用中很少的使用,了解它会用就OK,不需要研究的那么深,除非做那种内存压缩,存储方面工作. C语言中动态申请空间 malloc() q=(dlin ...
- 数据结构C语言版 表插入排序 静态表
数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ...
- 深入浅出数据结构C语言版(15)——优先队列(堆)
在普通队列中,元素出队的顺序是由元素入队时间决定的,也就是谁先入队,谁先出队.但是有时候我们希望有这样的一个队列:谁先入队不重要,重要的是谁的"优先级高",优先级越高越先出队.这样 ...
- 新手学python(2):C语言调用完成数据库操作
继续介绍本人的python学习过程.本节介绍如何利用python调用c代码.内容还是基于音乐信息提取的过程,架构如图一.Python调用c实现的功能是利用python访问c语言完成mysql数据库操作 ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- 数据结构(C语言)—排序
数据结构(C语言)—排序 排序 排序是按关键字的非递增或递减顺序对一组记录中心进行排序的操作.(将一组杂乱无章的数据按一定规律顺次排列起来.) 未定列表与不稳定列表 假设 Ki = Kj ( 1 ≤ ...
- C语言对文件的操作函数用法详解2
fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const ...
随机推荐
- Azure AD B2C(二)使用Azure AD B2C为ASP.NET Core 应用设置社交帐户(邮箱)登录/注册
一,引言 上次关于Azure AD B2C 讲到一些概念,有介绍到,Azure AD B2C 也是一种身份验证的解决方案,但是它运行客户使用其首选的社交,企业或者本地账户标识对应用程序和API进行单一 ...
- Nginx具体配置(三)
一:Nginx配置实例 - 反向代理 实例一: 1.1:实现效果 在Windows浏览器地址栏中输入www.123.com,跳转到Linux系统中的tomcat主页面 访问Nginx:192.168. ...
- 一个线上问题的思考:Eureka注册中心集群如何实现客户端请求负载及故障转移?
前言 先抛一个问题给我聪明的读者,如果你们使用微服务SpringCloud-Netflix进行业务开发,那么线上注册中心肯定也是用了集群部署,问题来了: 你了解Eureka注册中心集群如何实现客户端请 ...
- idea 2018版/2019版的破解
idea 2019版破解的穿越隧道:https://www.jianshu.com/p/09c9afae9a05 idea 2018版破解的穿越隧道:https://www.jianshu.com/p ...
- 微信小程序navigator带参数跳转及接收参数内容
// index.wxml <navigator class='looks-view' wx:for="{{imgUrlNew}}" wx:key="index&q ...
- Package Control:There are no packages available for installation
百度推荐的sublime3,里面好多全家桶,注意安装. 我的问题报错是:Package Control:There are no packages available for installation ...
- ORACLE数据库数据被修改或者删除恢复数据(闪回)
1. SELECT * FROM CT_FIN_RiskItem --先查询表,确定数据的确不对 (cfstatus 第一行缺少) 2. select * from CT_FIN_RiskItem ...
- 使用 Nginx 部署静态页面
Nginx 介绍 Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器, Nginx,它的发音为「engine X」,是一个高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/ POP ...
- 你真的了解CSS继承吗?看完必跪
也许你瞧不起以前的 css ,但是你不该再轻视眼下的 css .近年来 css 的变量系统已逐步得到各大浏览器厂商支持,自定义选择器等强势袭来,嵌套系统/模块系统也在路上…为了更好的掌握 css 这门 ...
- web网页多语言的实现方案_前端实现多语言切换
实现的效果 需要在web中实现多语言的切换,当用户语言切换完成后下次重新打开网页,也是上次设置的语言进行显示. 资源网站搜索大全https://55wd.com 实现步骤 1.在用户点击切换语言后,把 ...