约瑟夫问题c语言链表解法,约瑟夫环问题 --链表 C语言

总共有m个人在圆桌上,依次报名,数到第n个数的人退出圆桌,下一个由退出人下一个开始继续报名,循环直到最后一个停止将编号输出

#include

#include

typedef struct Head * PHead;

typedef struct Node * PNode;

struct Head{

PNode Next;

int length;

};

struct Node {

int data;

PNode Next;

//PNode Prev;

};

PHead creat_clist()

{

PHead TempList ;

TempList = (PHead)malloc(sizeof(struct Head));

if(TempList == NULL)

{

printf("\nInitial failed,can't malloc the head\n");

return TempList;

}

TempList -> length = 0;

TempList -> Next = NULL;

return TempList;

}

void Insert_List(PHead CList,int val,int pos)

{

PNode TempNode;

//printf("enter insert func \n");

TempNode = (PNode)malloc(sizeof(struct Node));

TempNode -> data = val;

//printf("debug..\n");

if(NULL == TempNode)

{

printf("initial Node failed\n");

return ;

}

if(CList -> Next == NULL)//当前链表为空

{

CList -> Next = TempNode;

TempNode -> Next = TempNode;//此时最后一个节点的指针指向自己本身

CList -> length ++;//长度自加一

//TempNode -> Prev = NULL;

}

else if (1 == pos)//插入到链表头部

{

PNode tmp_node = CList -> Next;//

TempNode -> Next = tmp_node;//

while (tmp_node -> Next != CList -> Next)

{

tmp_node = tmp_node->Next;

}

tmp_node -> Next = TempNode;

//printf("delete num is :%d\n",tmp_node -> Next);

CList -> Next = TempNode;

CList -> length++;

}

else

{

PNode tmp_Node = CList -> Next;

for(int circle = 1;circle < pos - 1;circle++)

{

tmp_Node = tmp_Node -> Next;

}

TempNode -> Next = tmp_Node -> Next;

tmp_Node -> Next = TempNode;

CList -> length ++ ;

}

return ;

}

PNode pop_List(PHead CList,int pos)

{

printf("CList length is %d,pop number is : %d\n",CList -> length,pos);

if(pos <= 0)

{

printf("pos select error!\n");

exit(1);

}

if(1 == pos)

{

PNode tmp_node = CList -> Next; // 用于作为最后一个的判断和返回的参数

printf("delete num is : %d\n",(CList -> Next) -> data);

PNode Temp_Node = (CList -> Next) -> Next;//

while(Temp_Node -> Next != tmp_node)

{

//printf("skip data is :%d\n",Temp_Node -> data);

Temp_Node = Temp_Node -> Next;

}

CList -> Next = tmp_node -> Next;

Temp_Node -> Next = CList -> Next;

CList -> length -- ;

return tmp_node;

}

else if(pos == CList->length)

{

printf("pos == length\n");

PNode Temp_Node = CList->Next;

for(int circle = 0;circle < pos - 1;circle++)

{

//printf("skip data is : %d\n",Temp_Node -> data);

Temp_Node = Temp_Node -> Next;

}

printf("delete num is : %d\n",(Temp_Node -> Next) -> data);

Temp_Node -> Next = CList -> Next;

CList -> length--;

}

else

{

//printf("normal\n");

PNode Temp_Node = CList -> Next;

for(int circle = 1;circle < pos - 1; circle++)

{

Temp_Node = Temp_Node -> Next;

}

PNode tmp_node = Temp_Node -> Next;

Temp_Node -> Next = tmp_node -> Next;

printf("delete num is : %d\n",tmp_node -> data);

CList -> length --;

printf("length is : %d\n",CList -> length);

return tmp_node;

}

}

void freeClist(PHead CList)

{

PNode Temp_Node = CList -> Next;

for(int circle = 0; circle < CList -> length; circle++)

{

PNode tmp_node = Temp_Node;

Temp_Node = Temp_Node -> Next;

free(tmp_node);

}

free(CList);

printf("release successfully!\n");

return ;

}

void show_CList(PHead CList)

{

PNode temp_node = CList -> Next;

//while(temp_node -> Next != CList -> Next)

for(int circle = 0;circle < CList -> length; circle++)

{

printf("%5d",temp_node -> data);

temp_node = temp_node -> Next;

}

printf("\n");

}

int main()

{

PHead CList = creat_clist();

int num ;

int length;

printf("请输入约瑟夫环长度: \n");

scanf("%d",&length);

printf("\n请输入筛选的序号:\n");

scanf("%d",&num);

for(int circle = 0;circle < length; circle ++)

{

Insert_List(CList,circle+1,circle+1);

}

printf( "Original: \n" );

show_CList(CList);

//show_CList( );

printf("length:%d \n",CList -> length);

PNode tmp_node = CList -> Next;

while(CList -> length != 1)

{

for (int circle = 1;circle < num - 1;circle++)

{

tmp_node = tmp_node ->Next;

}

if(tmp_node -> Next == CList -> Next)

{

printf("delete data is : %d\n",(CList -> Next) -> data);

//free(tmp_node -> Next);

tmp_node -> Next = (tmp_node -> Next) -> Next;

CList -> Next = tmp_node -> Next;

CList -> length --;

}

else

{

printf("delete data is : %d \n",(tmp_node -> Next) -> data);

//free(tmp_node -> Next);

tmp_node -> Next = (tmp_node -> Next) -> Next;

CList -> length --;

}

tmp_node = tmp_node -> Next;

}

printf("Last is:\n");

show_CList(CList);

freeClist(CList);

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】用fo-dicom实现print scu的注意事项!!!!!!!!!

转自&#xff1a;https://blog.csdn.net/tvsofa2008/article/details/50245357 用fo-dicom实现print scu的注意事项 fo-dicom是一个开源的协议库&#xff0c;开发语言是c#。网上针对fo-dicom的分析也有不少&#xff0c;但是专门针对dicom print的文章还是太少了。 近几天需要…

DELPHI串口通讯编程

spcomm更加简单 转贴 Delphi中串口通信的实现 河南省计算中心 张海航 -------------------------------------------------------------------------------- Delphi是一种具有功能强大、简便易用和代码执行速度快等优点的可视化快速应用开发工具&#xff0c;它在…

设计模式C++实现 ——观察者模式

观察者模式&#xff1a;定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。它还有两个别名&#xff0c;依赖(Dependents)&#xff0c;发布-订阅(Publish-Subsrcibe)。可以举个博客订阅的例子&…

【转】DCMTK开源库的学习笔记1:将DCM文件保存成BMP文件或数据流(即数组)

转自&#xff1a;https://blog.csdn.net/zssureqh/article/details/8784980 DCMTK开源库介绍&#xff1a; DCMTK是目前最全面实现DICOM3.0标准的开源库&#xff0c;通过结合DCMTK开源库和CxImage图像开源库&#xff0c;能够很方便的开发属于自己的DCM文件编辑浏览软件。 DCMT…

如何将C语言翻译成汇编语言,如何把汇编语言转换成C语言

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼程序:ORG 0000HLJMP MAINORG 000BHLJMP TIMEORG 1000HHOUR1 EQU 10hHOUR2 EQU 12hMIN1 EQU 14hMIN2 EQU 16hSEC1 EQU 18HCOUNT EQU 20HNUM1 EQU 22HNUM2 EQU 24HLL4 EQU 26Hs1 bit P1.0s2 bit P1.1s3 bit P1.2s4 bit P1.3A1 EQU 36…

数据库-Oracle【Oracle数据库设置默认表空间问题及Oracle,SQL,MySQL的自增变量设置】...

一、 Oracle数据库设置默认表空间问题 DBA们经常会遇到一个这样令人头疼的问题&#xff1a;不知道谁在Oracle上创建了一个用户&#xff0c;创建时&#xff0c;没有给这个用户指定默认表空间&#xff0c;所以这个用户就会采用默认的表空间——system表空间。导致系统表空间迅速被…

设计模式——Iterator模式实现研究

导读&#xff1a;软件设计模式是一种表达、记录和重用软件设计结构和设计经验的新方法&#xff0c;它对反复出现的设计结构的关键特征进行识别、抽象和命名&#xff0c;使重用成功设计和结构更加容易。本文介绍了软件设计模式的特点、描述方式以及在设计中使用模式带来的好处&a…

【转】DCMTK 开源库的学习笔记2:直接操作dcm文件中像素数据的尝试

转自&#xff1a;https://blog.csdn.net/zssureqh/article/details/8785132 DCMTK官网给出了JPEG格式压缩的DCM文件解压缩的方法&#xff08;http://support.dcmtk.org/docs/mod_dcmjpeg.html&#xff09;&#xff0c;代码摘录如下&#xff1a; DJDecoderRegistration::regist…

R语言处理非线性回归模型C-D方程,使用R语言进行多项式回归、非线性回归模型曲线拟合...

对于线性关系&#xff0c;我们可以进行简单的线性回归。对于其他关系&#xff0c;我们可以尝试拟合一条曲线。曲线拟合是构建一条曲线或数学函数的过程&#xff0c;它对一系列数据点具有最佳的拟合效果。使用示例数据集#我们将使Y成为因变量&#xff0c;X成为预测变量#因变量通…

认识IL

1.要编译的代码如下&#xff1a; using System; using System.Collections.Generic; using System.Text; namespace HellowWorld { class Program { static void Main() { Console.Write("Hello World!"); } } } 2…

c语言之多线程函数,如何用C语言实现多线程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Windows操作系统&#xff0c;C语言实现多线程&#xff1a;#include #include DWORD APIENTRY ThreadOne ( LPVOID threadArg ){printf ( "线程开始啦&#xff0c;参数是&#xff1a;%s\n" , (char *)threadArg );return …

Iterator模式

Iterator模式的几种用法 在网络上看帖子时发现不少模式的初学者对Iterator模式的理解仅仅停留在从类库的容器类取得Iterator来遍历容器中的内容的程度。 因此在这里写几个例子&#xff0c;来加深大家对Iterator模式的理解。 对容器中元素的访问涉及到3个方面。 1&#xff0e;容…

【转】DCMTK开源库的学习笔记3:dcmtk文件中数据元的修改

转自&#xff1a;https://blog.csdn.net/zssureqh/article/details/8804736 dcm文件是医学领域DICOM3.0标准所对应的主要的文件格式。前两篇学习笔记中&#xff0c;学习了读取dcm文件的相关信息&#xff0c;如信息头MetaInformation元素、像素数据元素&#xff0c;只停留在了读…

设计模式C++实现 —— 外观模式、组合模式

外观模式应该是用的很多的一种模式&#xff0c;特别是当一个系统很复杂时&#xff0c;系统提供给客户的是一个简单的对外接口&#xff0c;而把里面复杂的结构都封装了起来。客户只需使用这些简单接口就能使用这个系统&#xff0c;而不需要关注内部复杂的结构。DP一书的定义&…

rsync的原理和安装使用及配制详解(三)(转)

5、示例脚本 这里这些脚本都是rsync网站上的例子&#xff1a; 1、每隔七天将数据往中心服务器做增量备份 #!/bin/sh# This script does personal backups to a rsync backup server. You will end up# with a 7 day rotating incremental backup. The incrementals will go# in…

单片机c语言控制显示器,单片机实现LCD液晶显示器控制原理..docx

摘 要LCD液晶显示已经是人机界面的关键技术。 本文对基于单片机的LCD夜晶显示器 控制系统进行了研究。首先在绪论中介绍了本课题的课题背景、 研究意义及完成的功能。本系统是以单 片机的基本语言C语言来进行软件设计&#xff0c;51的编程语言常用的有二种&#xff0c;一种是汇…

【转】DCMTK开源库的学习笔记4:利用ini配置文件对dcm影像进行归档

转自&#xff1a;https://blog.csdn.net/zssureqh/article/details/8846337 背景介绍&#xff1a; 医学影像PACS工作站的服务端需要对大量的dcm文件进行归档&#xff0c;写入数据库处理。由于医学图像的特殊性&#xff0c;每一个患者&#xff08;即所谓的Patient&#xff09;…

linux ( )含义,Linux的shell中$()、$[] 、${}分别是什么意思?

在bash中&#xff0c;$( )与 (反引号)都是用来作命令替换的。命令替换与变量替换差不多&#xff0c;都是用来重组命令行的&#xff0c;先完成引号里的命令行&#xff0c;然后将其结果替换出来&#xff0c;再重组成新的命令行。exp 1[rootlocalhost ~]# echo today is $(date &q…

导师评语(转)

星期一到了……小英在交完作业後&#xff0c;中午马上被老师叫去罚站&#xff0c;附加念500遍「我以後不敢编谎话欺骗老师了」。 why&#xff1f;为何这名老师要残忍的对待这名柔弱的小学生&#xff1f;我们来瞧瞧她的作文是怎麽写的…… ━━━━━━━━━━━━━━━━━━…

VxWorks平台下计算cpu的利用率

1、VxWorks的spyLib库提供的spy工具的实现原理。 Spy利用辅助定时器来产生中断&#xff0c;并且为每个任务维护一个计数器。然后记下被中断的任务&#xff0c;并且将该任务的计数器加一。经过一段时间后&#xff0c;每个任务的计数器反映了该任务占用CPU利用率的情况。很明显&a…