约瑟夫问题C语言加注释,用链表实现约瑟夫环【有注释,有很多注释】
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
主要問題在于刪除約瑟夫環的數,結果一直出不來,看了好幾天改了好幾次都改不對
#include
#include
typedef struct ysf
{
int num;
struct ysf*next;
}YSF;
YSF*creat(int aa[])
{
int i;
YSF *head=NULL,*p1=NULL,*p2=NULL;
head=p1=p2=(YSF*)malloc(sizeof(YSF));
head->num=aa[0];
head->next=NULL;
for(i=1;i<10;i++)
{
p1=(YSF*)malloc(sizeof(YSF));
p1->num=aa[i];
p2->next=p1;
p2=p1;
p1->next=NULL;
}
p1->next=head;//這里我都指向頭指針了
return head;
}
void list(YSF*head)
{
int i;
YSF*p=head;
for(i=0;i<10;i++)
{
printf("%d\t",p->num);
p=p->next;
}
}
YSF*del(YSF*head,int b[],int num)
{
YSF *p1,*p2;
int i=0;
p1=head;
while(b[i]%num!=0)
{
p2=p1;//存儲p1
p1=p1->next;
if(i==9) i=0;//大于一次循環的時候i肯定要超過9,這時候需要把i置0
else
{
++i;//若沒有大于9,就讓i自增
}
if(b[i]==0) //這是相對大于一次循環說的,因為一次循環后,肯定有數被刪了,被刪的肯定被置0,只要被置0,就跳過
{
++i;// 如果是,就跳過這個數組元素
}
if(b[i]%num==0) //剛才不是自增了嗎,所以要驗證新的數組元素是不是我們想要的
{
printf("%d\n",b[i]);//如果是,就打印出來
b[i]=0;//并把我們想要的數置0,方便后面的循環檢查
p2->next=p1->next;//鏈表同時刪除這個數
p1=p1->next;
++i;//繼續自增
}
}
}
int main()
{
YSF*head=NULL;
int m=3;
int a[]={1,2,3,4,5,6,7,8,9,10};
head=creat(a);//創建鏈表
list(head);//這個可以不用打印的,但是還是打印好了
del(head,a,m);
system("pause");
return 0;
}
--( ̄▽ ̄)我怎么可能天天作死嘛,我要是天天作死,我就從這個世界上消失!
|ㄏ( ̄▽ ̄)嗯?【背后一涼】有什么在拉我?
|∑(っ°Д°;)っ啊咧?!?!
|°Д°;)っ|救命!!!
|°;)っ救。。。命。。。
|っ救。。。
|-------
總結
以上是生活随笔為你收集整理的约瑟夫问题C语言加注释,用链表实现约瑟夫环【有注释,有很多注释】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 单例方法_Java-单例模式
- 下一篇: C++学习之路 | PTA乙级—— 10