C语言关于链表的程序

C语言关于链表的程序,第1张

前阵子做的用单向链表实现约瑟夫问题:

有M个人围一圈玩报数,凡报到N的出退出,输出每次退出的人的编号。

#include

"stdio.h"

struct

game

{

int

ID

game

*pNext

}

void

main()

{

int

i,m=17,n=3

game

*pPrev,*pNode,*pTop

printf("Input

M

N:")

scanf("%d

%d",&m,&n)

if(n>m||n<1)

return

pTop=new

game

pTop->ID=1

pPrev=pTop

for(i=2i<=mi++)

{

pNode=new

game

pNode->ID=i

pPrev->pNext=pNode

pPrev=pNode

}

pNode->pNext=pTop

pPrev=pNode

pNode=pTop

i=0

while(pNode->pNext!=pNode)

{

i++

if(i%n==0)

{

printf("%d

",pNode->ID)

pPrev->pNext=pNode->pNext

delete

pNode

pNode=pPrev->pNext

i=0

}

else

{

pPrev=pNode

pNode=pNode->pNext

}

}

delete

pNode

}

注释我用的/**/,你之前逻辑不是很清晰,顺序我也做了一些修改

#include <iostream>

using namespace std

int main ()

{ struct Person

{

int No

int SortNo

Person* PNext//指向自身结构体的指针,链表所必需

}

//围成一圈

Person * pHead, * tmpP//pHead链表头,tmpP动态临时指针

for(int i=0i<69i++)

{

Person* pStu=new Person//新申请内存用于存放一个学生信息

if(i==0) pHead=pStu//记录链表头

else {//拉手

tmpP->PNext=pStu

}

int No=100+i+1 if(i>34) No=200+i-34//学号

pStu->No=No pStu->SortNo=i+1//成员赋值

// pHead->PNext=pStu//成员赋值

tmpP=pStu

if(i==68) pStu->PNext=pHead//最后一名学生拉着第一个学生

}

//报数游戏

/*因为判断的时候第一个已经是head->next了,所以这从1开始计数,1表示head*/

int count=1//报数

int Num=0//退出的人数,当Num==68时,结束游戏

Person * pCurrent=pHead//当前报数学生

Person * PPre=pHead//当前报数学生的前一个学生

while(1)

{

/*

count++

if(count%3==0)//退出游戏

{

//PCurrent//退出游戏

PPre=pCurrent->PNext//拉着下一个PCurrent->PNext同学的手

Num++

}

if(Num==68) break

PPre=pCurrent//

pCurrent=pCurrent->PNext//轮到下一个学生

if(count%3==0) delete pCurrent//释放内存

*/

PPre=pCurrent

if(Num==68) break

pCurrent=pCurrent->PNext//轮到下一个学生

count++ /*先赋值之后进行count++判断,因为count++之后马上是判断,所以先指向下一个学生再判断*/

if(count%3==0)//退出游戏

{

//PCurrent//退出游戏

PPre->PNext=pCurrent->PNext/*构建新的循环链表*/

delete pCurrent//释放内存

pCurrent=PPre//拉着下一个PCurrent->PNext同学的手 /*重新赋值*/

Num++

}

}

cout<<"StudentNo="<<pCurrent->No<<endl

cout<<"SortNo="<<pCurrent->SortNo<<endl

return 1

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7780559.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存