迴圈鍊錶實現解決約瑟夫問題

2021-10-01 13:31:00 字數 3703 閱讀 3457

typedef struct _tag_circlelist //頭節點

tcirclelist;

circlelist* circlelist_creat()

memset(ret, 0, sizeof(tcirclelist));

ret->header.next = null;

ret->slider = null;

ret->length = 0;

return ret;

}void circlelist_destory(circlelist* list)

}void circlelist_clear(circlelist* list)

int circlelist_length(circlelist* list)

return tlist->length;

}int circlelist_insert(circlelist* list, circlelistnode* node, int pos)

current = &(tlist->header); //current指向頭結點;

for (i = 0; i < pos && (current->next!=null); i++)

node->next = current->next;

current->next = node;

//若第一次插入節點,則游標指向第乙個節點

if (tlist->length == 0)

tlist->length++;

//當是頭插法的時候,需要執行的操作 跳0步 沒有跳走

if (current == (circlelistnode*)tlist)

ret = 1;

return ret;

}circlelistnode* circlelist_get(circlelist* list, int pos)

circlelistnode* current = null;

current = &(tlist->header);

for (i = 0; i < pos; i++)

return current->next;

}//根據位置刪除

circlelistnode* circlelist_delete(circlelist* list, int pos)

//刪除第乙個節點

if (current == (circlelistnode*)tlist)

ret = current->next;

current->next = ret->next;

tlist->length--;

//鍊錶不為空且刪除第乙個節點的操作

if (last != null)

//若刪除為游標所指元素

if (tlist->slider == ret)

//如果鍊錶為空了

if (tlist->length == 0)

}return ret;

}//刪除特定節點

circlelistnode* circlelist_deletenode(circlelist* list, circlelistnode* node)

current = current->next;

} //根據位置刪除

if (ret != null)

}return ret;

}//游標復位 指向第一位元素

circlelistnode* circlelist_reset(circlelist* list)

return ret;

}//當前游標指向

circlelistnode* circlelist_current(circlelist* list)

return ret;

}//游標下一

circlelistnode* circlelist_next(circlelist* list)

return ret;

}

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#include "circlelist.h"

typedef struct value

value;

int main()

printf("tmp->v: %d\n", tmp->v);

} printf("\n");

//游標復位

circlelist_reset(list);

//頭部刪除資料

while (circlelist_length(list)>0)

tmp = (value*)circlelist_current(list);

printf("刪除:%d\n", tmp->v);

circlelist_deletenode(list, (circlelistnode*)tmp);

} //銷毀鍊錶

迴圈鍊錶實現約瑟夫問題

高階約瑟夫問題 總結 初學資料結構的迴圈鍊錶,正好利用迴圈鍊錶可以很容易的解決上述問題。include include include typedef int elemtype define len sizeof node define n 41 總人數 41 define m 3 密碼固定為3 t...

約瑟夫問題 迴圈鍊錶簡單解決

約瑟夫求生最初版本 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所有人都自殺身亡為止。然而josep...

約瑟夫問題的迴圈鍊錶實現

據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...