数据结构之队列的学习程序实例

编程小白学习算法有什么入门级的书 , 或者学习资料? 一.入门系列 这些书籍通过图片、打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现,但是看过以下这些书对于之后实现算法打下坚实的思维基础。 很适合在闲暇之余拿出来阅读一番。 1.1 《啊哈!算法》 阅读链接:https://book.douban.com/subject/25894685/ 这不过是一本有趣的算法书而已。和别的算法书比较,如果硬要说它有什么特点的话,那就是你能看懂它。 推荐理由:本书中... 阅读详情

1.队列的定义及特点

 

  • 定义:队列也是一种运算首先的线性表,他的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出)而删除只能在表的另一端进行(只出不进),允许删除的一端称为队头(Front),允许插入的一端称为队尾(rear),当线性表中没有元素时,称为“空队”。
  • 特点:先进先出(FIFO)。

2.循环队列

 

3.顺序循环队列程序实例

头文件:include/seq_shunxu.h

#ifndef SEQ_SHUNXU_H
#define SEQ_SHUNXU_H


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxsize 6


typedef int datatype;
typedef struct sequence{
    datatype data[maxsize];
    int front;
    int rear;
}seq,*seqP;


void initSeq(seqP sq);//初始化队列
void setEmptySeq(seqP sq); //置空队列
int isEmpty(seqP sq);//判空队列
int isFull(seqP sq); //判满队列
int inSeq(seqP sq, int x); //入队
int outSeq(seqP sq, int *x); //出队


#endif

功能函数:src/func_seq_shunxu.c

#include "seq_shunxu.h"

void initSeq(seqP sq)
{
	sq->front = 0;
	sq->rear = 0;
}

void setEmptySeq(seqP sq)
{
	sq->front = 0;
	sq->rear = 0;
}

int isEmpty(seqP sq)
{
	return (sq->front==sq->rear)?1:0;
}

int isFull(seqP sq)
{
	return (sq->front==((sq->rear+1)%maxsize))?1:0;
}

int inSeq(seqP sq, int x)
{
	if(isFull(sq))
	{
		printf("队列已满!\n");
		return -1;
	}
	sq->data[sq->rear] = x;
	sq->rear = (sq->rear+1)%maxsize;
	return 0;
}

int outSeq(seqP sq, int *x)
{
	if(isEmpty(sq))
	{
		printf("队列为空!\n");
		return -1;
	}
	*x = sq->data[sq->front++];
	return 0;
}

 

主函数:src/main_seq_shunxu.c

#include "seq_shunxu.h"

int main()
{
	int i = 0;
	int j = 0;
	int ret = 0;
	int in_val = 0;
	int out_val = 0;
	seqP sq;
	sq = (seqP)malloc(sizeof(seq));
	if(sq==NULL)
	{
		printf("malloc error!\n");	
		return -1;
	}
        initSeq(sq);
	for(i=0;i<5;i++)
	{
		printf("请输入要进入队列的元素:");
		scanf("%d", &in_val);
		ret = inSeq(sq, in_val);
		if(ret)
		{
			printf("元素入队列失败!\n");
			return -1;
		}
	}

	printf("sq->front[%d];sq->rear[%d]\n", sq->front, sq->rear);
	for(i=0;i<5;i++)
	{
		printf("第[%d]个元素是[%d]\n", i+1, sq->data[i]);
	}

	printf("\n开始出队列:\n");
	for(i=0;i<3;i++)
	{
		ret = outSeq(sq, &out_val);
		if(ret)
		{
			printf("元素出队列失败!\n");
			return -1;
		}
		printf("第[%d]个出队列元素是[%d]\n", i+1, out_val);
	
	}

	printf("\n当前队列各元素值:\n");
	printf("sq->front[%d];sq->rear[%d]\n", sq->front, sq->rear);
	j = sq->front;
	while(j!=sq->rear)
	{
		printf("当前队列元素[%d]\n", sq->data[j]);
		j++;
	}

	printf("\n再次入队列:\n");
	for(i=0;i<3;i++)
	{
		printf("请输入需要入队列的元素值:");
		scanf("%d", &in_val);
		ret = inSeq(sq, in_val);
		if(ret)
		{
			printf("元素[%d]入队列失败!\n", in_val);
			return -1;
		}
	}

	printf("sq->front[%d];sq->rear[%d]\n", sq->front, sq->rear);
	j = sq->front;
	while(j!=sq->rear)
	{
		printf("当前队列元素值为[%d]\n", sq->data[j]);
		j = (j+1)%maxsize;
	}




	return 0;
}

Makefile:

CC:=gcc
TARGET:=bin/seq_shunxu
DEPEND:=obj/func_seq_shunxu.o obj/main_seq_shunxu.o
INCLUDE:=-Iinclude

$(TARGET):$(DEPEND)
	$(CC) -o $@ $^
obj/%.o:src/%.c
	$(CC) -o $@ $(INCLUDE) -c $^

.PHONY:clean

clean:
	rm -f $(DEPEND)

 

 

 

 

C/C++基础讲解(二十四)之数据结构篇之队列实例与K阶斐波那契序列 程序主要是基于Visual studio 2019进行编译完成了,有兴趣的小伙伴可以自己安装下Visual studio 2019,网上有现成的教程,当然了,如果有问题,也可以和我联系,这里我们主要讲解些源码实例,不多说了,言归正传。 C语言,做为学习其他语言的基础语言,其重要性就不言而喻了.下面我将和大家一起来学习探讨C语言的相关奥秘。 实例1:队列实例 实例2:K阶斐波那契序列 阅读详情

相关推荐

Java数据结构与程序设计第三章习题解析

数组是一组有序的元素的集合,每个元素都有相同的类型,并且这些元素通过数组索引进行访问。Java数组可以存储基本数据类型或对象。数组的声明和初始化是数组操作的第一步,也是至关重要的一步。// 声明一个整型数组,初始化长度为5// 通过索引访问数组元素链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的引用(指针)。单向链表的特点是每个节点只有一个方向的指针,即只指向下一个节点。为了构建一个单向链表,我们首先需要定义节点的数据结构。

weixin_36149538的博客 818

队列——(c语言实现)

队列,是一种先进先出(first in first out 简称FIFO)的数据结构,是只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,在队列中,进行插入的一端称为队尾,进行删除的一端称为队头。

2302_77041624的博客 3694

【UE 反射】反射的原理是什么?如何使用机制?

静态类型检查确保了类型的早期一致性和高效的代码执行,但减少了灵活性。动态类型检查提供了更大的灵活性,但增加了运行时的开销和潜在的错误。反射作为一种动态特性,无论是在静态类型语言还是动态类型语言中,都提供了强大的运行时类型操作能力,但也伴随着性能和安全性方面的权衡。通过理解这些联系,开发者可以在不同的编程语言和应用场景中选择适合的类型检查方式和反射机制,以实现所需的动态行为和灵活性,同时保证性能和安全性。

hhw_hhw的博客 6033

数据结构——“队列 & 队列的应用“ 详细图解和代码示例 (没更新完)

队列队列的概念什么是队列队列的特征队列——顺序存储队列顺序存储基本算法分析队列顺序存储基本算法实现顺序队应用 队列的概念 队列是限制在两端进行插入操作和删除操作的线性表,允许进行存入操作的一端称为“队尾”,允许进行删除操作的一端称为“队头”。当线性表中没有元素时,称为“空队”。 特点 ;先进先出(FIFO)。 什么是队列 我们先举一个售票处的例子:有两个栏杆挡着进入窗口进行买票,一个接一个的从栏杆后进去,在栏杆内等待,这起到公平工公正的作用,防止了插队。但是有一个坏处是,如果你尿急但还在栏杆中, 你是不能

weixin_44278698的博客 1820

从信号到振镜:STM32F103 + XY2-100协议 + AM26LS31芯片的激光打标/雕刻系统信号链搭建指南

本文详细介绍了基于STM32F103微控制器和XY2-100协议的激光打标/雕刻系统信号链搭建方法。从数字振镜控制协议解析、AM26LS31差分驱动电路设计到信号完整性优化,提供了一套完整的解决方案,帮助工程师实现高精度激光控制系统的开发与调试。

weixin_42536058的博客 236

Ubuntu20.04下Pycharm的快速安装与配置指南

本文提供了一份详细的Ubuntu 20.04系统下PyCharm社区版的安装与配置指南。文章重点介绍了通过手动下载.tar.gz压缩包进行安装的灵活方法,并涵盖了系统准备、依赖安装、首次运行、创建快捷方式以及解释器配置等关键步骤,帮助Python开发者快速搭建高效、可控的本地开发环境。

weixin_28831341的博客 379

线性队列常用程序代码

数据结构线性队列常用的算法程序:创建、入队、出队、判断队列是否为空、判断队列是否为满。

m0_51144400的博客 120

【CADARXC++】ObjectArx2023 C++ CAD二次开发环境配置笔记

从官网或第三方平台下载以下AUtoCAD2023、VisualStudio2019和ObjectArx2023安装时请注意安装顺序。

BIMCATIA的博客 1789

数据结构——队列的实现

文章目录一、什么是队列?二、队列的实现1.每个模块的功能2.功能的实现3.测试程序总结 一、什么是队列? 队列的概念及结构:队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为对头 队列在生活中的应用也非常广泛,例如我们平时买东西付款,先排队的就先付款,后排队的就后付款(不允许插队)。又比如去医院挂号,先去挂号的有个挂号单(比如21号),后面的人去挂号

冯同学的博客 1411

CATIA高效设计:自定义快捷键全攻略

本文详细介绍了如何在CATIA中自定义快捷键以提升设计效率。通过减少鼠标依赖、优化工作流程和减轻手腕疲劳,合理设置快捷键可显著提高建模速度。文章提供了从基础设置到高级配置的全流程指南,包括解决冲突、推荐方案及外设扩展建议,帮助用户快速掌握CATIA高效设计技巧。

weixin_42648844的博客 584

安检机图像处理避坑指南:从条纹校正到物质分类,那些论文里没写的工程细节

本文深入探讨了双能X射线安检机图像处理中的关键工程实践,从条纹校正到物质分类,揭示了论文中未提及的实用技巧。针对探测器校正、物质分类模糊、伪彩色系统设计等核心问题,提供了动态参数更新、空间上下文分析和自适应色彩映射等解决方案,助力提升安检系统的准确性和鲁棒性。

weixin_30325487的博客 888

数据结构——栈和队列应用案例

由运算符优先级确定运算顺序,例:# 3 * (7-2) #(一对#为界限符,表示表达式开始结束)3、)(右括号)于栈顶括号进行匹配,看看是否可以匹配上,匹配上就将栈顶右括号出栈。( [] () )或( { [ ] } )括号左右可以匹配上,正确;实现这个过程需要两个栈,一个是算符栈,另一个称为操作数栈。实现逻辑,将每一次的余数进栈,全部完毕后出栈。( [ ( ) )括号数量不对,格式错误。[ ( ] )只能嵌套不可以交叉,错误;4、](右括号)与栈顶对比,不匹配。检验( ( ) ] )是否匹配。

weixin_46146281的博客 314

Simulink开发项1000例实战专栏--实例161:基于Simulink实现电动汽车电机驱动系统的建模与仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车电机驱动系统的建模与仿真。该系统能够全面评估电机驱动系统的性能,验证控制策略的有效性,并通过优化设计提高车辆的动力性和效率。引入智能预测:结合人工智能技术,实现更智能的控制策略。扩展功能:增加对多种电机类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

xiaoheshang_123的博客 189

20162313苑洪铭 2017-2018-1 《程序设计与数据结构》第7周学习总结

20162313苑洪铭 2017-2018-1 《程序设计与数据结构》第7周学习总结 教材学习内容总结 树由一组结点及一组边构成,结点用来保存元素,边表示结点之间的连接。 树中较低一层的结点称为其前一层结点的子节点。 有相同父结点的结点称为兄弟结点。没有任何子节点的结点称为叶结点。 每个结点最多有两个子节点的树称为二叉树。 树的遍历 先序遍历:访问根,自左向右遍历子树。 中序遍历:...

weixin_30675967的博客 159

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

20162302 《程序设计与数据结构》第九周学习总结

20162302 2017-2018-1 《程序设计与数据结构》第九周学习总结 教材学习内容总结 理解堆和优先队列 理解堆和优先队列的关系 掌握堆的实现 掌握堆排序的实现 分析Java Collections API中堆和相关的类 教材学习中的问题和解决过程 问题:什么是优先队列 优先队列(priority queue)是一种服从两个有序规律的集合。首先,具有更高优先级的项排在前面。其次,具有...

weixin_30466953的博客 101

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

PHP语言的数据结构

在PHP中,数组是一种非常灵活和强大的数据结构。它可以存储多个值,并且这些值可以是不同类型的。PHP中的数组实际上是一种关联数组,支持整数和字符串的键值。在面向对象编程中,对象是类的实例。PHP是一种面向对象的语言,使用对象可以更高效地组织和管理复杂的数据。链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组相比,链表在插入和删除操作中更为高效,尤其是在大数据量时。栈是一种后进先出(LIFO)的数据结构,常用于函数调用、撤销操作等场景。

2501_91391120的博客 340

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

20162305 2017-2018-1 《程序设计与数据结构》第6周学习总结

20162305 2017-2018-1 《程序设计与数据结构》第6周学习总结 教材学习内容总结 一、队列ADT 队列是一个线性集合,它在一端添加元素,在另一端删除元素,以先进先出的方式处理元素。 二、使用链表实现队列 实现链表的过程中,除了有一个指向链表第一个元素的引用(front)之外,还必须使用第二个引用(rear)指向表的最后一个元素,再利用一个整形变量count记录队列中的元素个数。 ...

weixin_30394669的博客 72

数据结构之初体验

大学是测控技术与仪器专业,虽然在嵌入式和c语言时,零散地了解过数据的存储内容,后来在工作中,图像处理方面也接触过K-D树等信息,但是没有系统的对数据结构学习过。有幸大叔开课,对数据结构有了一个整体的把握。 就像打辩论一样,定义先行。 数据结构:计算机存储、组织数据的方式。 由于学过嵌入式,也曾用汇编编程实现过一些功能,对寄存器有一番个人理解。当初大学老师也说,汇编语言能够更加深入地理解数据存

u010027802的博客 341

数据结构与算法Java版学习教程,最适合新手入门(通俗易懂!)

????俗话说: 数据结构玩的好,大厂为你敞开门 核心算法掌握牢,高薪自动找上门Java 关于数据结构算法的重要性,不言而喻,做开发的都懂。 但是,能学的好,用的好的寥寥无几 除了基础不牢靠外,还有一个原因就是可以供Java程序员学习的教程并不多。 目前市面上更多的是C语言,C++版的数据结构和算法,极少有关于Java数据结构和算法的课程,所以Java程序员往往需要跨语言学习,难度和效率大大折扣! 专为Java程序员精细录制,一套属于咱Java程序员的数据结构和算法课程,帮助广大Java程序员

sion127的博客 576

20172307 2017-2018-2 《程序设计与数据结构》第10周学习总结

20172307 2017-2018-2 《程序设计与数据结构》第10周学习总结 教材学习内容总结 第十三章 1.集合:集合是一种对象,有些集合是异构的,有些是同构的。 2.列表:可以实现插入,添加,删除等功能。 3.队列:使用先进先出的存取方式。 4.堆栈:使用后进先出的存取方式。 5.树:由一个根节点和构成参差结构的多个节点组成。 6.图:在一个图中,一个节点到一个另一个节点的连接称为边,连...

weixin_33755847的博客 83

20172305 《程序设计与数据结构》第十周学习总结

20172305 2017-2018-2 《程序设计与数据结构》第十周学习总结 教材学习内容总结 本周内容主要为书的13.1-13.5的内容: 第十三章 1.集合的同构和异构,集合同构意味着保存类型全部相同,集合异构意味着保存各种类型的对象。 2.动态数据结构和静态数据结构。 静态数据结构,例如数组在内存中是连续的存储区域,缺点是长度是固定的,新增或删除某一数据花费的时间比较多。优点可以直...

weixin_30535043的博客 241

Logo语言的数据结构

Logo语言作为一种面向初学者的编程语言,通过其简单易懂的语法和丰富的图形化功能,极大地激发了学生们的学习兴趣。在Logo中,数据结构作为程序设计的基本工具,不仅辅助了数据的组织和管理,还提高了程序的可读性与可维护性。通过对列表、符号、过程等数据结构的理解,学生们能够更有效地解决问题,并在编程的过程中积累知识与经验。这些数据结构虽小,却在Logo语言的使用中发挥着重要作用,帮助学生们建立起对编程的基本概念,培养了他们的逻辑思维能力,为日后学习更多复杂的编程语言打下了坚实的基础。

2501_90494615的博客 291

java:数据结构和算法的重要性

数据结构和算法的重要性 1)算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算 2)一般来讲程序会使用了内存计算框架(比如Spark)和缓存技术(比如Redis等)来优化程序,再深入的思考一下,这些计算框架和缓存技术,它的核心功能是哪个部分呢?(底层也是算法) 3)拿实际工作经历来说,在Unix下开发服务器程序,功能是要支持上千万人同时在线,在上线前,做内测,一切OK,可上线后,服务器就支撑不住了,公司的CTO对代码进行优化,再次上线,坚如磐石。你就能感受到程序是有灵魂的,就是算法。 4)目

居于幽暗而自己努力 的博客 1895

2、算法与数据结构

简单介绍 1、算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算 2、一般来讲程序会使用了内存计算框架(比如Spark)和缓存技术(比如Redis等)来优化程序,再深入的思考一下,这些计算框架和缓存技术,它的核心功能是哪个部分呢? 3、拿实际工作经历来说,在Unix下开发服务器程序,功能是要支持上千万人同时在线,在上线前,做内测,一切OK,可上线后,服务器就支撑不住了,公司的CTO对代码进行优化,再次上线,坚如磐石。你就能感受到程序是有灵魂的,就是算法。 4、目前程序员面试的

HK_Milky的博客 140

#20172330 2018-2019-1 《程序设计与数据结构》第四周学习总结

20172330 2018-2019-1 《程序设计与数据结构》第四周学习总结 教材学习内容总结 队列 1.列表可以分为有序列表、无序列表和索引列表。 2.有序列表中的元素具有内在关联,这种关联定义了元素之间的顺序。 3.无序列表中的元素按使用者所选择的任意方式排序。 4.索引列表为他的元素维护一段连续的数字索引值。 5.迭代器是一个对象,它提供了在一个集合上进行迭代操作的手段。 6.接口允许我...

weixin_30641465的博客 85
上一篇: make及makefile学习
下一篇: shell脚本之expect的使用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值