【数据结构】基于数组和循环队列解决约瑟夫问题

用循环队列实现约瑟夫环(C语言实现) 思路:首先得定义一个循环队列,循环队列定义如下: 设front为队首,rear为队尾,Q指向malloc分配的动态数组,n为元素个数 入队: rear=(rear+1)%n; Q[rear]=入队元素; 队满不可入队:(rear+1)%n=front; 出队: front=(front+1)%n; 出队元素:Q[front]; 队空不可出队:front=rear; 显然循环队列浪费了一个空间,即f... 阅读详情

约瑟夫问题是一个经典的问题,下面来介绍约瑟夫问题及其变体的解决方法。

 


1. 约瑟夫问题

设有编号为1、2、3、…、n的n个人围成一个圈,从第一个人开始报数,报到m的人出圈,再从他的下一个人起从新报数,报到m的人出圈,如此下去,直到所有人全部出圈为止。给定任意的n和m,设计算法求n个人出圈的次序。
 


1.1  解决方案

我们尝试使用基本的数组来解决这一问题。

1.2 代码

//约瑟夫问题

#include<iostream>
#include<cstdio>

using namespace std;

const int N = 100;

void Josephus(int a[], int n, int m)
{
	int k = 0;         //记录出局的人数
	int num = -1;  //正在报数的人编号
	while (k < n)
	{
		for (int i = 0; i < m;)
		{
			num = (num + 1) % n;
			if (a[num] != 0)
				i++;
		}
		cout << a[num] << endl;
		a[num] = 0;
		k++;
	}
	return;
}

int main()
{
	int n, m;
	scanf("%d %d", &n, &m);
	int a[N] = { 0 };
	for (int i = 0; i < n; i++)
	{
		a[i] = i + 1;
	}
	Josephus(a, n, m);
	return 0;
}



使用数组的解决方案,代码相当简洁,虽然可读性差了一点。那么,如果开始报数的不是1号,而是由输入决定的p号呢?下面我们来引入约瑟夫问题的变体。

 


2. 约瑟夫问题变体

n个小孩围坐成一圈,并按顺时针编号为1、2、3、…、n,从编号为p的小孩开始报数,由1报到m,报到m的人出圈,再从他的下一个人起从新报数,报到m的人出圈,如此下去,直到所有人全部出圈为止。请按出去的先后顺序输出小孩的编号。


2.1 解决方案

我们这次尝试使用循环队列来解决问题

2.2 代码

//用循环队列解决约瑟夫问题

#include<iostream>
#include<cstdio>
#include<queue>

using namespace std;

void Josephus(int n, int p, int m)
{
	//初始化编号
	queue<int> arr;
	for (int i = 0; i < n; i++)
	{
		arr.push((p - 1 + i) % n + 1);
	}

	int count = 1; //记录队头的报号
	int data;
	while (arr.size() != 0)
	{
		data = arr.front(); //取出队头的数据
		arr.pop();
		if (count == m) //如果报到m
		{
			printf("%d ", data);
			count = 1;
			continue;
		}
		arr.push(data);
		count++;
	}

	return;
}

int main()
{
	int n, p, m;
	printf("Input n ,p and m : ");
	while (scanf("%d %d %d", &n, &p, &m) != EOF)
	{
		if (n == 0 && p == 0 && m == 0)
		{
			printf("Over!\n");
			break;
		}
		printf("Data in turn : ");
		Josephus(n, p, m);
		printf("\nInput n ,p and m : ");
	}

	return 0;
}

 


3. 拓展

上面我们使用了数组、循环队列来解决约瑟夫问题。不管采用什么样的数据结构,解决的算法都是一样的。而程序是由数据结构和算法组成的,这也是数据结构课程中最开始就强调的概念。解决约瑟夫问题还可以尝试使用循环链表来解决,实现思想与循环队列类似,但是实现难度要高得多,这也说明了STL极大地降低了我们解决问题的难度。

用循环队列求解约瑟夫环问题 用循环队列求解约瑟夫环问题 大家好,这次我们来求解求解约瑟夫环问题,并对比用循环队列和用普通形式求解之间的不同之处。也欢迎各位大佬指正。 目录如下可快速查阅问题描述循环队列求解算法描述程序清单运行结果普通形式求解算法描述程序清单运行结果对比分析 问题描述 设有n个人站成一圈,其编号为1~n。从编号为1的人开始按顺时针方向1、2……循环报数,数到m的人出列,然后从出列者的下一个人重新开始报数,数到m... 阅读详情

相关推荐

(python)约瑟夫(Josephus)个人围成一圈,并按顺时针依次编号1-n。从编号为1的人开始,按顺时针方向每隔一 人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿

题目:n个人围成一圈,并按顺时针依次编号1-n。从编号为1的人开始,按顺时针方向每隔一 人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿。 如果你想成为最后两个幸运儿,请问开始时应该站在什么位置?(3<=n<=50) 输入:开始时的人数n。 输出:第1行是选出顺序,第2行是两名幸运儿的开始位置(按升序排列),位置编号之 间用一个空格分开。 理解:这个输入的...

异艺毅的博客 8826

循环队列-约瑟夫环问题

将编号 1 到 n 的人依次入队。在测试程序中,输入 n、k 和 m 的值,调用。函数得到出队次序,将其转化为字符串并打印。然后,定义了解决约瑟夫环问题的函数。,包括队列的基本运算算法。首先,定义了循环队列类。首先创建一个循环队列。最后,返回结果列表。

2301_78872243的博客 1530

Java中的数据结构:队列及其应用

本文深入探讨了Java中队列的实现,包括数组循环队列和链表队列的概念、实现及其在实际编程中的应用。通过分析队列的基本操作、队列的满与空判断、以及在特定问题中如何利用队列解决实际问题,如寻找回文数和约瑟夫问题,文章揭示了队列作为基础数据结构在解决顺序处理问题中的关键作用。

weixin_30798867的博客 331

循环队列的应用——约瑟夫问题

约瑟夫问题 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.) 问题来历 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由...

Attention_0的博客 4390

汇丰外包Java岗面试复盘:Zoom面1.5小时,从英语、粤语到现场敲代码的极限挑战

本文详细记录了汇丰银行外包Java岗位的面试全过程,包括多语言切换(英语、粤语)的技术沟通挑战和现场编码测试的实战经验。从高并发编程到JVM调优,面试不仅考察技术深度,更注重实战问题解决能力。文章分享了应对跨国银行技术面试的实用策略,帮助Java开发者在跨文化环境中提升竞争力。

weixin_42524824的博客 361

Vmware安装windowsServer2022版本

全网最详细的Vmware安装windowsServer2022版本

A乐神的博客 7005

Java代码实现循环队列

循环队列结构 Java代码实现循环队列 // 基于数组实现一个循环链表 public class CircleArrayQueue<T> { // 定义数组用于存放数据 private T[] arr; private int head; // 记录队列头 private int tail; // 记录队列尾 private int size; // 数组大小 // 循环链表初始化 public CircleArrayQueue(

1 Byte 的博客 2480

Paypal开发者中心获取“ClientId”和“ClientSecret”参数

正式环境设置 1、登录到 paypal开发者中心 网址:https://developer.paypal.com/developer/ 点击右上角登录按钮登录 2、左侧栏 - 我的应用程序和凭证 - 点击“创建新应用” 新注册的paypal账号,需要进行邮箱验证,验证通过后,需要等待一段时间(或重新登录),才会出现相关设置项位置 验证邮箱通过后,点击创建新应用 3、按提示填写,保存创建应用 4、点击刚创建的应用进入应用详情页 5、应用详情页获得网站开发人员所需要的“ClientId”和“Client

龚清林的博客 1万+

用环形队列的数组实现约瑟夫问题java_数据结构和算法

1. 数据结构与算法入门1.1 经典算法问题:汉诺塔八皇后问题马踏棋盘1.2 字符串匹配1.2.1 暴力匹配1.2.2 KMP算法1.3 数据结构和算法重要性算法是程序灵魂内存计算框架1.4 数据结构与算法关系2. 实际算法问题:2.1 str.replaceAll( str )2.1.1 问题:试写出单链表表示的字符串类以及字符串结点类的定义,并且依次实现它的构造函数,以及计算串的长度,串赋值,...

weixin_39758953的博客 199

TWINCAT3保姆级教程:手把手教你给Ecat从站烧录EEPROM(含XML配置避坑指南)

本文提供TWINCAT3环境下Ecat从站EEPROM烧录的完整教程,涵盖XML配置避坑指南。详细讲解环境准备、设备扫描、XML文件配置、EEPROM烧录流程及故障排查,帮助工程师高效解决设备识别问题,提升产线调试效率。

weixin_30693683的博客 516

高通平台WIFI学习-- WCN7851 三频 2X2 MIMO DBS HBS Wi-Fi 7介绍

WCN7851是支持Wi-Fi 7和蓝牙5.4的三频SoC芯片,具有以下核心特性:采用NSP334封装,支持2.4GHz/5GHz/6GHz三频段并发操作,最高速率达5.8Gbps;集成MU-MIMO、4096QAM调制技术,6GHz频段支持320MHz带宽;提供PCIe Gen3接口和低功耗设计,兼容多种无线标准。电气特性包括1.8V/1.2V可编程GPIO、76.8MHz时钟源要求,以及详细的射频性能参数。该芯片通过多链路操作和动态频率选择等先进功能,实现高性能无线连接。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 1271

C语言基础编程题(约瑟夫环:隔二删除)

删数(约瑟夫环):每隔两个数循环删除数组元素,到末尾时循环至开头继续,直至最后一个元素,返 回其数组下标。 //分析:本题的关键是如何删除,暴力求解法,一个个删除,并将自后的元素全部往前移,时间复杂度 高;另一种是遍历过程跳过需要删除的数;另一个关键是如何在移动过程中保持数组的原始下标,因为 数据本身可能是无序的,下标和数据可能没有关系,并且还可能重复。 性能分析:循环队列法由于每次扫描的数都是...

Frank_sample的专栏 890

CMM软件:PC-DMIS汽车制造二次开发

PC-DMIS 是一种广泛应用于坐标测量机(CMM)的测量软件,它不仅提供了强大的测量功能,还支持用户通过二次开发来扩展其功能。二次开发可以显著提升测量效率,满足特定的测量需求,减少重复性工作,提高数据处理和分析的准确性。本节将介绍 PC-DMIS 二次开发的基本概念、开发环境的搭建以及开发中常用的工具和方法。PC-DMIS 二次开发为用户提供了强大的工具,可以显著提升测量效率、减少重复性工作并提高数据处理和分析的准确性。

kkchenjj的博客 1813

第九周项目1--猴子选大王(数组版)

问题与代码: /* * Copyright (c)2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:项目1.cpp * 作 者:陈哲 * 完成日期:2016年10月27日 * 版 本 号:v1.0 *问题描述:一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。

sdchenzhe的博客 269

OpenClaw实战系列06:持久记忆与RAG知识库构建——让AI真正“记住”你

本文介绍了OpenClaw AI助理的持久记忆与RAG知识库构建功能。OpenClaw采用"文件即真理"的独特设计,所有记忆都以Markdown文件形式存储,支持直接编辑和Git版本管理。记忆系统分为三层:长期精炼记忆(MEMORY.md)、日常日志(按日期存储)和归档记忆。文章详细说明了环境配置步骤,包括安装必要组件、创建目录结构、设置API密钥,并提供了OpenClaw主配置文件的完整参数说明。该系统实现了跨会话、跨平台的持久化记忆,使AI助理能真正理解用户需求。

PeterPan的博客 1171

EM的理论与实践(基础篇)

EM理论与实践

m0_61544122的博客 2378

如何简单使用队列、循环队列解题?结合实例详细阐述队列的思想、实际用途、常用套路类型及解题思想【数据结构系统第二章】

从实例出发,明确队列的常用实现形式以及使用队列解决常见问题的方法。总结了队列问题的常见套路以及解决类似问题的共性方法

aohanla的博客 1150

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

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

js 打印数组_约瑟夫环的四种解决方案JS

传说罗马人占领了乔塔帕特,41 个犹太人被围堵在一个山洞里。他们拒绝被俘虏,而决定集体自杀,大家决定了一个自杀方案,41 个人围成一个圈,由第 1 个人开始顺时针报数,每报数为 3 的人立刻自杀,然后再由下一个人重新从 1 开始报数,依旧是每报数为 3 的人立刻自杀,依次循环下去。其中两位犹太人并不想自杀,是数学家约瑟夫和他的朋友,他们发现了自杀方案的规律,选了两个特定的位置,最后只剩下他们两人,...

weixin_39578899的博客 303

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

约瑟夫环问题『js实现』

传说罗马人占领了乔塔帕特,41 个犹太人被围堵在一个山洞里。他们拒绝被俘虏,而决定集体自杀,大家决定了一个自杀方案,41 个人围成一个圈,由第 1 个人开始顺时针报数,每报数为 3 的人立刻自杀,然后再由下一个人重新从 1 开始报数,依旧是每报数为 3 的人立刻自杀,依次循环下去。其中两位犹太人并不想自杀,是数学家约瑟夫和他的朋友,他们发现了自杀方案的规律,选了两个特定的位置,最后只剩下他们两人,而活了下来。那么这两个位置分别是什么? 这个问题转化成要解决的通用问题:即 n 个人围成一个圈,这 n 个人.

Floatwor青舟的博客 946

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

1334:【例2-3】围圈报数

题目描述】 有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出列的顺序。 【输入】 n和m。 【输出】 出列的顺序。 【输入样例】 4 17 【输出样例】 1 3 4 2   用数组实现链式结构 #include&lt;bits/s...

Rushinger 5480

队列Queue1

队列根据实现方式不同分为顺序队列和链式队列,顺序队列和循环队列的模板

tiger_root的博客 234

什么是队列?

第十二讲 队列 队列定义 队列是一种操作受限的线性表,只允许在表的前端(front)进行删除操作又称作出队,在表的后端进行插入操作,称为入队,符合先进先出(First in First out)的特性。在队尾插入元素叫做入队,对头删除元素叫做出队。 队列实现方式 队列实现方式总共有三种,一种是通过数组实现,一种通过链表实现,另一种通过stl中的模板 queue实现 数组实现 顺序队列 定义一个数组a[N],并设置两个指针进行管理。一个指针为front指向队头,一个指针为rear指向队尾。当元素入队时,rea

qq_42376883的博客 1万+

拉勾教育 重学数据结构与算法 06 | 队列:先进先出的线性表,如何实现增删查?

队列是什么; 队列对于数据的增删查处理; 循环队列的数据操作; 链式队列的数据操作; 队列的案例——约瑟夫环

Portia356的博客 323

数据结构考前背代码1:最小生成树,插入排序,循环队列约瑟夫

3.循环队列实现约瑟夫环。

whcwhc111111的博客 234

6、增删改 - 队列 - 先进先出的线性表

队列是什么 与栈相似,队列也是一种特殊的线性表,与线性表的不同之处也是体现在对数据的增和删的操作上。 队列的特点是先进先出: 先进,表示队列的数据新增操作只能在末端进行,不允许在队列的中间某个结点后新增数据; 先出,队列的数据删除操作只能在始端进行,不允许在队列的中间某个结点后删除数据。也就是说队列的增和删的操作只能分别在这个队列的队尾和队头进行,如下图所示: 与线性表、栈一样,队列也存在这两种存储方式,即顺序队列和链式队列: 顺序队列,依赖数组来实现,其中的数据在内存中也

qq_55961812的博客 277

数据结构系列第一部分:表

/** 1.2 在链表中间,根据节点的序号来插入节点,这样的话,上述在链表尾部增加节点可以看成是这种情况的特例 @param heroNode 加入的节点 */ public void addMiddleNode(HeroNode heroNode) { //flag来判断该节点的序号在链表中是否存在 //要考虑三种情况: //1 新加入节点的序号在尾节点 //2 新加入的节点的序号在链表中已经存在,所以,要做一个报错处理 //3 新加入的节点的序号在链表中不存在,允许加入 boolean f

m0_66798557的博客 204
上一篇: 【数据结构】单链表逆置算法
下一篇: 【数据结构】任意进制数的转换
兮的皮卡丘
博客等级 码龄9年 20粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值