C++约瑟夫环c语言链表链表方法解决程序解释

C++自定义链表实现约瑟夫环(下)
3.3 从链表中删除指定结点
从循环单向列表中删除结点时,首先在链表找到该结点,然后将该结点前一个结点的person_next指向该结点的person_next即可,如图所示。
for(int i=1; i&=num_ ++i)
for(int j=1; j& ++j, point_lastperson=point_lastperson-& peron_next);
code = point_lastperson-&
cout && point_lastperson-&index && “ ”;
point_lastperson-&info_person.index =
point_lastperson-&person_next-&info_person.
point_lastperson-&info_person.code =
point_lastperson-&person_next-&info_person.
point_newperson = point_lastperson-&person_
point_lastperson-&person_next =
point_lastperson-&person_next-&person_
delete point_
}其中,第一个for循环的的作用是遍历顺时针圈中的所有人;第二个for循环的作用是根据密码code从链表中找到指定的人。在找到指定的人之后,输出其对应的索引号,之后将该人的信息更新为下一个人的信息,并且将其下一个人的指针更新为下下一个人的指针,最后释放下一个人所对应的内存,达到从链表中删除该人的目的。
扫码向博主提问
非学,无以致疑;非问,无以广识
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!C++循环链表解决约瑟夫环问题 - 林枫水湾湾 - 博客园
约瑟夫环问题可以简单的使用数组的方式实现,但是现在我使用循环链表的方法来实现,因为上午看到一道面试题规定使用循环链表解决约瑟夫环问题。
  什么是约瑟夫环?
  &约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。&(百度百科中的解决办法列出了很多,可以看到循环链表并不是最简单的方法)
  这道面试题考察了循环链表的&创建&,&遍历&和&删除&。
源代码如下:
#include&iostream&
using namespace
struct MyNode
MyNode(int a_data):m_data(a_data),m_pNext(NULL){}
MyNode *m_pN
class Josephus
Josephus(int a_N,int a_K,int a_M):m_N(a_N),m_K(a_K),m_M(a_M){
createList();
outputList();
protected:
void createList();
void outputList();
MyNode *m_pH
//循环链表的头节点
//链表节点个数
// 第一个报数人的序号
// 报数出局的数
void Josephus::createList()
MyNode *pre = NULL;
MyNode *cur = NULL;
MyNode *p = new MyNode(1);
for(int i=2; i&=m_N;i++)
p = new MyNode(i);
pre-&m_pNext =
cur-&m_pNext = m_pH
int n = m_N;
cout && "初始序列为:" &&
while(n--){
cout && p-&m_data && ",";
p = p-&m_pN
void Josephus::outputList()
// 让pStart指向第一个报数人的序号
MyNode *pStart = m_pH
int count = 1;
while(count & m_K){
pStart = pStart-&m_pN
MyNode *pTemp = pS
MyNode *pPre = NULL;
MyNode *tobeDeleted = NULL;
cout && "依次出局的序列为:" &&
while(pTemp-&m_pNext!=pTemp) // when pTemp-&m_pNext==pTemp only one node in the list
int count = 1;
while(count & m_M){
pTemp = pTemp-&m_pN
tobeDeleted = pT
pTemp = pTemp-&m_pN
pPre-&m_pNext = pT
cout && tobeDeleted-&m_data && ",";
cout && pTemp-&m_data &&
int main()
int total_
cout && "请输入总人数:" &&
cin && total_
cout && "请输入开始数的人:" &&
cout && "请输入出局人数的数:" &&
Josephus josephus(total_people,start,step);
运行程序结果如下:
随笔 - 133&>&带密码的约瑟夫环建立一个单链表,编写程序依次输出出列顺序
带密码的约瑟夫环建立一个单链表,编写程序依次输出出列顺序
上传大小:41KB
n个人围坐在一起,每人拥有一个密码。开始时从一个人按顺时针方向报数,报到m为止(m&=20),最后报数的人出列,将出列的人的密码数作为下一个m。从出列人的下一位开始顺时针报数,数到m的人出列。如此循环下去,直到所有人出列为止。
条件n=7m=20密码以次为3172474
建立一个单链表,编写程序依次输出出列顺序。
综合评分:5
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有4条
精品啊,是好东西!谢谢
很有用的东东哦,值了
很好,很有用。对课程设计有帮助。
jingbao1211
综合评分:
积分/C币:3
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
带密码的约瑟夫环建立一个单链表,编写程序依次输出出列顺序
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
带密码的约瑟夫环建立一个单链表,编写程序依次输出出列顺序如何用c++,循环单链表解决约瑟夫环问题。
[问题点数:40分,结帖人izhou1992]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:0
结帖率 100%
匿名用户不能发表回复!|
CSDN今日推荐&>&C/C++经典约瑟夫环问题——带头结点的单向循环链表
C/C++经典约瑟夫环问题——带头结点的单向循环链表
上传大小:834B
本程序是采用带头结点的单向循环链表写成的,当指针指到要出列的结点时,先输出结点的序列号,再删除之,直到所有结点都出列完
综合评分:4
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有8条
代码非常清晰,运行后没错误,结果也正确。非常好!感谢~
开发中需要使用链表,学习了
下了代码后,仿造代码,自己写了一个约瑟夫环,能运行。不错!顶
shanlp20102
综合评分:
积分/C币:3
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
C/C++经典约瑟夫环问题——带头结点的单向循环链表
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
C/C++经典约瑟夫环问题——带头结点的单向循环链表

我要回帖

更多关于 约瑟夫问题链表 的文章

 

随机推荐