1. 程式人生 > >Joseph環(順序表、鏈佇列)

Joseph環(順序表、鏈佇列)

1.順序表

#include<stdio.h>
void Joseph(int str[][2],int m,int n);

int main()
{
    int m,n,i;                   //n表示環長,m表示是密碼
    int str[100][2];               //二維陣列用來儲存元素值和標誌變數
    printf("請輸入環長和密碼:");
    scanf("%d,%d",&n,&m);
    for(i=0;i<n;i++)
    {
        printf("請輸入第%d個元素值:",i+1);
        scanf("%d",&str[i][0]);
        str[i][1]=1;             //設標誌變數為1
    }
    printf("\n");
    Joseph(str,m,n);
    return 0;
}

void Joseph(int str[][2],int m,int n)
{
    int count=1,a=0,i;      //a表示出環元素的個數,count計數是否達到密碼值
    for(i=0;i<n;)
    {
        if(str[i][1]==1)
        {
            if(count==m)
            {
                printf("%-3d",str[i][0]);     //輸出被選中的元素
                count=1;      //重新計數
                str[i][1]=0;  //將已輸出的元素的標誌變數變為0
                a++;
            }
            else  count++;
        }
        i++;
        if(i==n&&a<n)  i=0;   //當輸出的元素個數小於總個數時,繼續迴圈
    }
}

2.鏈佇列

#include <stdio.h>
#include<malloc.h>
typedef struct Node
{
    int data;
    struct Node *next;
}Node;
void Joseph(Node *front,Node *r,int m,int n);

int main()
{
    int m,n,i;
     Node *front=NULL,*s,*r;   //front為頭結點,r為尾指標
  printf("請輸入環長和密碼:");
  scanf("%d,%d",&n,&m);
    front=(Node *)malloc(sizeof(Node));
    r=front;
    for(i=1;i<=n;i++)
    {
        s=(Node *)malloc(sizeof(Node));
  s->data=i;
        r->next=s;
        r=s;
    }
    r->next=NULL;
    Joseph(front,r,m,n);
    return 0;
}

void Joseph(Node *front,Node *r,int m,int n)
{
    Node *p=front->next,*q,*a;
    int count=1,i;
    for(i=0;i<n;)
    {
        if(count<m && p->next != NULL)         
        {
   a=p;
   p=p->next;
   front->next = p;
   a->next=NULL;
            r->next=a;
   r=a;
            count++;
        }
        else
        {
            printf("%-3d",p->data);
   q=p;
   p=p->next;
   front->next=p;
            free(q);
            i++;   
            count=1;
   
        }
    }
}


相關推薦

Joseph順序佇列

1.順序表 #include<stdio.h> void Joseph(int str[][2],int m,int n); int main() {     int m,n,i;                   //n表示環長,m表示是密碼     int

【資料結構】堆疊順序的JAVA程式碼實現

堆疊(stack)是一種特殊的線性表,是一種只允許在表的一端進行插入或刪除操作的線性表。表中允許進行插入和刪除操作的一端稱為棧頂,最下面的那一端稱為棧底。棧頂是動態的,它由一個稱為棧頂指標的位置指示器指示。當棧中沒有資料元素時,為空棧。堆疊的插入操作稱為進棧或入棧,堆疊的刪除

順序佇列十進位制轉化為二進位制實驗二

1.順序棧   #ifndef SeqStack_H #define SeqStack_H const int StackSize=10; template <class DataType> class SeqStack { public: SeqStac

資料結構與演算法C語言 | 線性順序儲存式儲存

   線性表是最常用最簡單的線性結構    線性結構具有以下基本特徵: 線性結構是一個數據元素的有序(次序)集(處理元素有限)。若該集合非空,則 1)必存在唯一的一個“第一元素”; 2)必存在唯一的一個“最後元素”; 3)除第一元素之外,其餘每個元素均有唯一的前

代寫數據結構C語言代寫代寫順序C/C++編程作業代寫C/C++Data Structures代寫R語言編程作業

which atom stl boolean add debug buffer lean word COMP20003 Algorithms and Data StructuresSecond (Spring) Semester 2018[Assignment 1]Olym

線性順序

#include<iostream> #include<cstdio> #define LIST_INIT_SIZE 100 //初始數量 #define LISTINCREMENT 10 //增加量 #define LA_INITLEN 3

java佇列--先進先出迴圈佇列佇列

佇列: 只允許在一端進行插入操作(隊尾),在另一端進行刪除操作(隊頭)。 佇列的特徵就是: 先進先出。 佇列的思想及實現也同樣非常簡單。在生活中的各種常常都需要排隊進行,鍵盤中快取區、作業系統中的作業排程等都有用到佇列先進先出的思想。在這裡同樣用一個示意圖展示佇列的基本思想

資料結構——線性 順序單鏈靜態連結串列迴圈連結串列雙向連結串列

提示:以下內容不適合零基礎人員,僅供筆者複習之用。 一、線性結構的基本特徵: 1.集合中必存在唯一的一個“第一元素”; 2.集合中必存在唯一的一個 “最後元素”; 3.除最後元素在外,均有 唯一的後繼; 4.除第一元素之外,均有 唯一的前驅。 如:j

【資料結構】二叉樹順序儲存式儲存的JAVA程式碼實現

二叉樹是一種非線性的資料結構。它是由n個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩顆不相交的、被分別稱為左子樹、右子樹的二叉樹組成。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也可以稱做一個結點。二叉樹是有序的,即若將其左右兩個子樹顛倒

順序棧,

順序棧 順序棧是指利用順序儲存結構實現的棧,即利用一組地址連續的儲存單元依次存放自棧底到棧頂的資料元素。 程式碼實現如下: #include <iostream> #include <stdio.h> #include <malloc.h> usi

數據結構(05)_單鏈單鏈靜態單鏈單向循

traverse 註意 簡單 過多 輔助 最終 一次 des code 21.線性表的鏈式存儲結構 21.1.鏈式存儲的定義: 為了表示每個數據元素與其直接後繼之間的邏輯關系,數據元素除過存儲本身的信息之外,還需要存儲其後繼元素的地址信息。鏈式存儲結構的邏輯結構: 數據域

資料結構——線性順序單鏈C++

內容概要:​​​​​​​ 1.程式碼部分: 線性表抽象類 順序表類 單鏈表類 雙鏈表類 主函式 2.基本概念及注意事項 程式碼(測試環境VS2017): //線性表ADT類的定義:ADT_List.h template <typena

java佇列實現順序佇列佇列迴圈佇列

雙向順序佇列ArrayDeque和雙向鏈式佇列LinkedList,JDK已經包含,在此略。ArrayDeque包括順序棧和順序佇列,LinkedList包含鏈式棧和鏈式佇列。ArrayDeque和LinkedList都是執行緒不安全的。PriorityQueue優先佇列也

順序單鏈的差異

順序表由於順序存放,拿到查詢的值就能拿到查詢值的上一個和下一個值,即可以直接返回查詢的值的位置(索引號)。 單鏈表在查詢的時候無論是按值還是按節點查詢,就算拿到了那個節點或值,只能得到下一個節點的位置,而無法得到上一個節點的位置,即無法修改上一個節點的位置,因此只能迴圈遍歷。 雙鏈表如果按照值搜尋的話,通

迴圈佇列順序實現,連結串列實現

迴圈佇列 迴圈佇列是將順序佇列變為一個變成一個環狀的空間。頭尾指標以及佇列元素之間的關係不變,只是在迴圈佇列中,頭尾指標“依環狀增 1”的操作可用”模“運算來實現。通過取模運算,頭指標和尾指標就可以在順序表空間內以頭尾銜接的方式迴圈移動。 隊空條件:Q.front == Q.rear

josephus的實現順序和連結

josephus環問題是資料結構中一個常見的例項:假設有n個人做成一圈,現在要求從第k個人開始報數,報道m的人退出。然後從下一個人繼續從頭報數,並按相同的規則退出, 直到所有的退出。還有就是要按退出的順序打印出出列人的編號。 其實看到這個“一圈”,我第一瞬間就想到了用迴圈連結串列,也

順序棧已及佇列的實現

#include<iostream> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define QUEUE_INIT_SIZE 100 #define MAXSIZE 100 typedef int SElemTy

嚴蔚敏版資料結構——佇列順序表示

佇列有兩種表示方式,我們先看順序表示: 程式碼中的rear(尾指標)與front(頭指標)都是int 型的,它的作用就是做陣列下標,我們習慣稱它為指標,這裡應該注意它不是指標型別。頭指標始終指向佇列頭元素,尾指標始終指向隊尾元素的下一個位置。 由於增加元素rear加一,刪除元素fr

資料結構—線性結構線性棧與佇列

3.3 線性表的抽象資料型別ADT 線性表的抽象定義 集合A和集合B的並集操作 3.4 線性表的順序儲存結構 線性表的順序儲存的結構程式碼 地址計算 3.5 順序儲存結構的插入與刪除 獲得元素操作 GetElem 插入操作 ListInsert 刪除

順序順序佇列佇列區別

1.順序棧 順序棧的主要特徵是用一個數組實現棧的儲存,top指標確定棧頂元素位置 定義形式如下: #define Max 100 template <class T> class SeqStack{ public: SeqStack():t