C語言用循環(huán)單鏈表實現(xiàn)約瑟夫環(huán)
更新時間:2021年10月28日 17:09:41 作者:東流長江水
這篇文章主要為大家詳細介紹了C語言用循環(huán)單鏈表實現(xiàn)約瑟夫環(huán),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
用循環(huán)單鏈表實現(xiàn)約瑟夫環(huán)(c語言),供大家參考,具體內(nèi)容如下
源代碼如下,采用Dev編譯通過,成功運行,默認數(shù)到三出局。
主函數(shù):
main.c文件
#include <stdio.h>
#include "head.h"
#include "1.h"
int main()
{
Linklist L;
int n;
printf("請輸入約瑟夫環(huán)中的人數(shù):");
scanf("%d",&n);
Createlist(L,n);
printf("創(chuàng)建的約瑟夫環(huán)為:\n");
Listtrave(L,n);
printf("依次出局的結(jié)果為:\n");
Solution(L,n);
return 0;
}
head.h文件:
#include "1.h"
#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype;
typedef struct LNode{
Elemtype data;
struct LNode *next;
}LNode,*Linklist;
void Createlist(Linklist &L,int n)
{
Linklist p,tail;
L = (Linklist)malloc(sizeof(LNode));
L->next = L;//先使其循環(huán)
p = L;
p->data = 1;//創(chuàng)建首節(jié)點之后就先給首節(jié)點賦值,使得后面節(jié)點賦值的操作能夠循環(huán)
tail = L;
for(int i = 2;i <= n;i++)
{
p = (Linklist)malloc(sizeof(LNode));
p->data = i;
p->next = L;
tail->next = p;
tail = p;
}
printf("已生成一個長度為%d的約瑟夫環(huán)!\n",n);
}
void Listtrave(Linklist L,int n)//遍歷函數(shù)
{
Linklist p;
p = L;
for(int i = 1;i <= n;i++)
{
printf("%3d",p->data);
p = p->next;
}
printf("\n");
}
int Solution(Linklist L,int n)
{
Linklist p,s;
p = L,s = L;
int count = 1;
while(L)
{
if(count != 3)
{
count++;p = p->next;//進行不等于3時的移位
}
else
{
Linklist q;
q = p;//用q保存p所指的位置,方便進行節(jié)點的刪除
if(s->next->data == s->data)//當只有一個元素的時候
{
printf("%3d\n",s->data);
free(s);
return OK;
}
else//當有兩個及兩個以上的元素的時候
{
count = 1;//先將count重置為1
printf("%3d",p->data);//再打印出出局的值
while(s->next != p)
{
s = s->next;//將s移位到p的前驅(qū)節(jié)點處
}
p = p->next;//使p指向自己的下一個節(jié)點
s->next = p;//進行刪除
free(q);
}
}
}
}
1.h文件:
#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2
運行結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java C++題解leetcode915分割數(shù)組示例
這篇文章主要為大家介紹了Java C++題解leetcode915分割數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
C++ Boost MetaStateMachine定義狀態(tài)機超詳細講解
Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱2022-12-12

