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