C語言用循環(huán)單鏈表實現(xiàn)約瑟夫環(huán)
更新時間:2021年10月28日 17:09:41 作者:東流長江水
這篇文章主要為大家詳細(xì)介紹了C語言用循環(huán)單鏈表實現(xiàn)約瑟夫環(huán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
用循環(huán)單鏈表實現(xiàn)約瑟夫環(huán)(c語言),供大家參考,具體內(nèi)容如下
源代碼如下,采用Dev編譯通過,成功運行,默認(rèn)數(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)//當(dāng)只有一個元素的時候
{
printf("%3d\n",s->data);
free(s);
return OK;
}
else//當(dāng)有兩個及兩個以上的元素的時候
{
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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++中的三種繼承public,protected,private詳細(xì)解析
我們已經(jīng)知道,在基類以private方式被繼承時,其public和protected成員在子類中變?yōu)閜rivate成員。然而某些情況下,需要在子類中將一個或多個繼承的成員恢復(fù)其在基類中的訪問權(quán)限2013-09-09
C++11正則表達(dá)式詳解(regex_match、regex_search和regex_replace)
正則表達(dá)式(regular expression)是計算機科學(xué)中的一個概念,又稱規(guī)則表達(dá)式,下面這篇文章主要介紹了C++11正則表達(dá)式(regex_match、regex_search和regex_replace)的相關(guān)資料,需要的朋友可以參考下2022-09-09
C語言學(xué)習(xí)之條件和?if...else語句詳解
這篇文章主要給大家介紹了C語言中的條件和?if...else語句,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12
C++的try塊與異常處理及調(diào)試技術(shù)實例解析
這篇文章主要介紹了C++的try塊與異常處理及調(diào)試技術(shù)實例解析,有助于讀者加深對try塊調(diào)試技術(shù)的認(rèn)識,需要的朋友可以參考下2014-07-07

