1. 程式人生 > >連結串列解決約瑟夫環問題

連結串列解決約瑟夫環問題

第一次做約瑟夫環問題,歡迎大家來找茬~
如果做單迴圈連結串列時有點暈了,要畫圖要畫圖要畫圖,重要的事講三遍,因為真的是很好的方法。

#include<stdio.h>
#include<stdlib.h>

typedef struct link
{
    int data;
    struct link *next;
}Circle,*Circlepoint;

Circlepoint Create(Circlepoint head)
{
    int n,i,num,x;
    Circlepoint p;
    head=(Circlepoint)malloc
(sizeof(Circle)); head->next=NULL; printf("輸入元素個數:\n"); scanf("%d",&n); Circlepoint s,r=head; printf("輸入表元素:\n"); for(i=0;i<n;i++) { scanf("%d",&num); s=(Circlepoint)malloc(sizeof(Circle)); s->data=num; //printf("%d %d\n",i,s->data);
r->next=s; r=s; } r->next=head->next; printf("指定從哪個數字開始:"); scanf("%d",&x); p=head->next; while(p->data!=x) { p=p->next; } head->next=p;//改變頭指標位置 return head; } void show(Circlepoint head) { Circlepoint p; p=head; for
(p=head->next;p->next!=head->next;p=p->next) { printf("%d\t",p->data); } printf("%d\t",p->data); printf("\n\n"); } Circlepoint Delete_(Circlepoint head,int n) { Circlepoint p,r; int i; p=head; while(p->next!=p) //迴圈連結串列中只剩下一個節點 { for(i=0;i<n-1;i++) { p=p->next; } r=p->next; //刪除節點語句1 p->next=r->next;//刪除節點語句2,不要寫反啦 printf("%d",r->data); head->next=p->next; } return head; }

函式部分完畢。
拜了個拜~

相關推薦

用迴圈連結串列解決的問題

約瑟夫環問題簡介  約瑟夫環問題的原來描述為,設有編號為1,2,……,n的n(n>0)個人圍成一個圈,從第1個人開始報數,報到m時停止報數,報m的人出圈,再從他的下一個人起重新報數,報到m時停止報數,報m的出圈,……,如此下去,直到所有人全部出圈為止。當任意給定n和m後,設計演算法求n個人出

連結串列解決問題

第一次做約瑟夫環問題,歡迎大家來找茬~ 如果做單迴圈連結串列時有點暈了,要畫圖要畫圖要畫圖,重要的事講三遍,因為真的是很好的方法。 #include<stdio.h> #include<stdlib.h> typedef struc

使用連結串列解決的問題

已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為1的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列,問最後一個出環的人的原編號。 用在單鏈表中刪除一個結點的思想

使用連結串列解決問題

1139 約瑟夫環問題 時間限制:500MS 記憶體限制:65536K 提交次數:157 通過次數:79 題型: 程式設計題 語言: G++;GCC Description 約瑟夫(josephus)環是這樣的:假設有n個小孩圍坐成一個圓圈,並從1開始依次

靜態連結串列解決問題

#include<stdio.h> #define MAXSIZE 100  struct {  int  cur ;  int  number;  int  secret_node; }space[MAXSIZE]; int main(void) {  int

Problem E: 用連結串列實現

Description 你聽說過約瑟夫問題嗎?問題大致如下:首先n個人圍成一個圈,標記為1到n號。接著,從1號開始報數(從1開始),然後2號報數,然後3號。。。當有人報到到m時,這個人就要踢出比賽,然後從被踢出的人的下一個人開始,重新報數(從1開始)。這樣經過n-1次後,就只剩下了一個人,問最後剩下的

資料結構——迴圈連結串列、僅設尾指標的迴圈連結串列

1 //迴圈連結串列,連結串列的尾結點的link域中不是NULL,而是存放了指標連結串列開始結點的指標 2 ////設p是在迴圈連結串列中逐個結點檢測指標,則在判斷p是否達到連結串列的鏈尾時p->link == first 3 4 5 //迴圈

單向迴圈連結串列模擬

約瑟夫環問題,編好為1,2,3....n的個人按順時針圍坐一圈,每人手持一個密碼。一開始選定m=6,從第一個人開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下一個人開始重新從1報數,如此下去,直至所有人全部出列為止

迴圈連結串列 實現

【約瑟夫環問題】 已知 n 個人(n>=1)圍坐一圓桌周圍,從 1 開始順序編號,從序號為 1 的人開始報數,順時針數到 m 的那個人出列。下一個人又從 1 開始報數,數到m 的那個人又出列

迴圈連結串列的問題

在程式設計師面試寶典中,有道面試題如下: 已知n個人(以編號1,2,3,,...,n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;從他的下個開始,數到k重新數數,數m個數,那個人出列;以此重複下去,直到圓桌周圍的人全部出列。試用C++程式設計實現

線性表---單迴圈連結串列問題)

約瑟夫環問題: 已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。 程式碼: #include <i

(學習java)用java語言構造的迴圈連結串列解決問題

//josephus問題 41個人1-3報數,數到3的自殺,最後剩餘的2個人結點資料 public class Josephus { public static void main(String[] args) { SLineList s = new SLineLis

使用環形連結串列實現

連結串列實現Josephus約瑟夫環問題如下,輸出每輪殺掉的人的編號,並且輸出最後剩下的一名幸運者。 標頭檔案如下 #ifndef JOSEPHLIST_H #define JOSEPHLIST_H #include <stdio.h> typedef st

Java 使用連結串列實現

約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。求出出隊序列。 採用連結串列實現,結點資

單向迴圈連結串列練習-問題

開發十年,就只剩下這套架構體系了! >>>   

資料結構---連結串列問題帶來的思考

連結串列和陣列一樣也是線性表的一種。和陣列不同,它不需要再記憶體中開闢連續的空間。 連結串列通過指標將一組零散的記憶體塊連線在一起。我們把記憶體塊稱為連結串列的“結點”(是節點還是結點,結點連線起來打個結所以叫“結點”?開個玩笑),也就是說這些結點可以在記憶體的任意地方,只要有其他的結點的指標指向這個位置就可

用循鏈表解決問題

循環 解決 使用 end head als list output 循環條件 約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規

單循鏈表 解決的問題

malloc 表示 重復 printf 約瑟夫 ext std head eof 已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的

PHP解決的問題

//準備好41個人 $people = array(); for($i=0;$i<=40;$i++) { $people[] = $i+1; } /** * @param $people 準備好的陣列 * @param $step 每到第幾個人,會把他殺掉 * @p

php解決

轉載 https://www.cnblogs.com/china90/p/7367396.html 今天偶遇一道演算法題 “約瑟夫環”是一個數學的應用問題:一群猴子排成一圈,按1,2,…,n依次編號。然後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數, 再數到第m只,在把它