《数据结构》队列的链式表示--链队

2024-02-16 10:58

本文主要是介绍《数据结构》队列的链式表示--链队,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*
队列的链式表示 
*/#include<stdio.h>/*
定义链式队列的存储结构 
*/ 
typedef struct QNode{int data;struct QNode *next;
}QNode,*QueuePtr;typedef struct{QueuePtr front;QueuePtr rear;
}LinkQueue;/*
初始化链式队列 
思想:构造一个只有一个头结点的空队列,将对头指针和队尾指针都指向该结点;
然后将头指针的指针域置空。 
*/
int InitQueue(LinkQueue &Q){Q.front=Q.rear=new QNode;if(!Q.front){		//存储分配失败 return 0;}Q.front->next=NULL;return 1;
}/*
链队的入队操作:
思想:1.生成一个新结点,
2.将新结点插入到队尾,修改队尾指针。 
*/ 
int EnQueue(LinkQueue &Q,int e){struct QNode *p;p=new QNode;if(!p){printf("存储分配失败!\n");return 0;}p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;return 1;
}/*
链队的出队操作:
思想: 1.首先判断链队是否为空;
2。若队列非空,将对头元素出队,然后修改对头指针。 
*/
int DeQueue(LinkQueue &Q,int &e){if(Q.front==Q.rear){printf("队列为空!\n");return 0;}struct QNode *p;p=Q.front->next;//指针p指向对头元素e=p->data;Q.front->next=p->next;//修改对头指针 if(Q.rear==p){	//若出队的是最后一个元素,则队尾指针指向头结点 Q.rear=Q.front;} delete p;return 1;
}/*
计算链队的长度 
思想:
设置一个指针p,让p指向链队的对头元素,当p非空时,length加1. 
*/
int QueueLength(LinkQueue Q){int length=0;struct QNode *p;p=Q.front->next;while(p){length++;p=p->next;}return length;
}/*
遍历链队
思想:1.首先获取链队的长度,
2.当变量i小于队列长度时,循环将队列元素出队,并打印出队的元素。 
*/ 
void TraveQueue(LinkQueue Q){int len;len=QueueLength(Q);for(int i=0;i<len;i++){int e;DeQueue(Q,e);printf("%d ",e);}
}int main(){LinkQueue Q;if(InitQueue(Q)){printf("链式队列初始化成功!\n"); }else{printf("链式队列初始化失败!\n");}int n;printf("请输入入队的元素的个数:");scanf("%d",&n);for(int i=0;i<n;i++){int e;printf("请输入第%d个元素:",i+1);scanf("%d",&e);EnQueue(Q,e);}printf("链队Q的长度:%d\n",QueueLength(Q));printf("遍历链队:\n");TraveQueue(Q);
}

这篇关于《数据结构》队列的链式表示--链队的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/714330

相关文章

SpringKafka错误处理(重试机制与死信队列)

《SpringKafka错误处理(重试机制与死信队列)》SpringKafka提供了全面的错误处理机制,通过灵活的重试策略和死信队列处理,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、Spring Kafka错误处理基础二、配置重试机制三、死信队列实现四、特定异常的处理策略五

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

Redis延迟队列的实现示例

《Redis延迟队列的实现示例》Redis延迟队列是一种使用Redis实现的消息队列,本文主要介绍了Redis延迟队列的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、什么是 Redis 延迟队列二、实现原理三、Java 代码示例四、注意事项五、使用 Redi

hdu1180(广搜+优先队列)

此题要求最少到达目标点T的最短时间,所以我选择了广度优先搜索,并且要用到优先队列。 另外此题注意点较多,比如说可以在某个点停留,我wa了好多两次,就是因为忽略了这一点,然后参考了大神的思想,然后经过反复修改才AC的 这是我的代码 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)