2019四川省資料結構分析加強

2022-06-20 21:18:02 字數 4244 閱讀 5884

1、約瑟夫環問題(josephus問題)是指編號為1、

2、…,n的n(n>0)個人按順時針方向圍坐成一圈,現從第s個人開始按順時針方向報數,數到第m個人出列,然後從出列的下乙個人重新開始報數,數到第m的人又出列,…,如此重複直到所有的人全部出列為止。現要求採用迴圈鍊錶結構設計乙個演算法,模擬此過程。

#include<

typedef int datatype;

typedef struct node

listnode;

typedef listnode *linklist;

void jose(linklist head,int s,int m)

while(k1->next!=k1) /*當迴圈鍊錶中的結點個數大於1時*/

pre->next=p->next; /*輸出該結點,並刪除該結點*/

printf("%4d",p->data);

free(p);

k1=pre->next新的報數起點*/

}printf("%4d",k1->data); /*輸出最後乙個結點*/

free(k1);

}main()

r->next=head; /*生成迴圈鍊錶*/

jose(head,s,m); /*呼叫函式*/}}

2、二叉樹的層次遍歷序列的第乙個結點是二叉樹的根。實際上,層次遍歷序列中的每個結點都是「區域性根」。確定根後,到二叉樹的中序序列中,查到該結點,該結點將二叉樹分為「左根右」三部分。

若左、右子樹均有,則層次序列根結點的後面應是左右子樹的根;若中序序列中只有左子樹或只有右子樹,則在層次序列的根結點後也只有左子樹的根或右子樹的根。這樣,定義乙個全域性變數指標r,指向層次序列待處理元素。演算法中先處理根結點,將根結點和左右子女的資訊入佇列。

然後,在佇列不空的條件下,迴圈處理二叉樹的結點。佇列中元素的資料結構定義如下:

typedef struct

qnode;

bitree creat(datatype in,level,int n)

//由二叉樹的層次序列level[n]和中序序列in[n]生成二叉樹。 n是二叉樹的結點數

qnode s,qq是元素為qnode型別的佇列,容量足夠大

init(q); int r=0; //r是層次序列指標,指向當前待處理的結點

bitree p=(bitree)malloc(sizeof(binode生成根結點

p->data=level[0]; p->lchild=null; p->rchild=null; //填寫該結點資料

for (i=0; iif (in[i]==level[0]) break;

if (i==0) //根結點無左子樹,遍歷序列的1—n-1是右子樹

else if (i==n-1) //根結點無右子樹,遍歷序列的1—n-1是左子樹

else //根結點有左子樹和右子樹

while (!empty(q)) //當佇列不空,進行迴圈,構造二叉樹的左右子樹

else if (i==

else

}//結束while (!empty(q))

return(p);

}//演算法結束

3、約瑟夫環問題(josephus問題)是指編號為1、2、…,n的n(n>0)個人按順時針方向圍坐成一圈,現從第s個人開始按順時針方向報數,數到第m個人出列,然後從出列的下乙個人重新開始報數,數到第m的人又出列,…,如此重複直到所有的人全部出列為止。現要求採用迴圈鍊錶結構設計乙個演算法,模擬此過程。

4、約瑟夫環問題(josephus問題)是指編號為1、2、…,n的n(n>0)個人按順時針方向圍坐成一圈,現從第s個人開始按順時針方向報數,數到第m個人出列,然後從出列的下乙個人重新開始報數,數到第m的人又出列,…,如此重複直到所有的人全部出列為止。現要求採用迴圈鍊錶結構設計乙個演算法,模擬此過程。

#include<>

typedef int datatype;

typedef struct node

listnode;

typedef listnode *linklist;

void jose(linklist head,int s,int m)

while(k1->next!=k1) /*當迴圈鍊錶中的結點個數大於1時*/

pre->next=p->next; /*輸出該結點,並刪除該結點*/

printf("%4d",p->data);

free(p);

k1=pre->next新的報數起點*/

}printf("%4d",k1->data); /*輸出最後乙個結點*/

free(k1);

}main()

r->next=head; /*生成迴圈鍊錶*/

jose(head,s,m); /*呼叫函式*/}}

5、二部圖(bipartite graph) g=(v,e)是乙個能將其結點集v分為兩不相交子集v 1和v2=v-v1的無向圖,使得:v1中的任何兩個結點在圖g中均不相鄰,v2中的任何結點在圖g中也均不相鄰。

(1).請各舉乙個結點個數為5的二部圖和非二部圖的例子。

(2).請用c或pascal編寫乙個函式bipartite判斷乙個連通無向圖g是否是二部圖,並分析程式的時間複雜度。設g用二維陣列a來表示,大小為n*n(n為結點個數)。請在程式中加必要的注釋。

若有必要可直接利用堆疊或佇列操作。【

6、設從鍵盤輸入一整數的序列:a1, a2, a3,…,an,試編寫演算法實現:用棧結構儲存輸入的整數,當ai≠-1時,將ai進棧;當ai=-1時,輸出棧頂整數並出棧。

演算法應對異常情況(入棧滿等)給出相應的資訊。

設有乙個揹包可以放入的物品重量為s,現有n件物品,重量分別為w1,w2,...,wn。問能否從這n件物品中選擇若干件放入揹包,使得放入的重量之和正好是s。

設布林函式knap(s,n)表示揹包問題的解,wi(i=1,2,...,n)均為正整數,並已順序儲存地在陣列w中。請在下列演算法的下劃線處填空,使其正確求解揹包問題。

knap(s,n)

若s=0

則knap←true

否則若(s<0)或(s>0且n<1)

則knap←false

否則若knap(1) , _=true

則print(w[n]);knap ←true

否則 knap←knap(2) _ , _

設有乙個順序棧s,元素s1, s2, s3, s4, s5, s6依次進棧,如果6個元素的出棧順序為s2, s3, s4, s6, s5, s1,則順序棧的容量至少應為多少?畫出具體進棧、出棧過程。

假定採用帶頭結點的單鏈表儲存單詞,當兩個單詞有相同的字尾時,則可共享相同的字尾儲存空間。例如:

設str1和str2是分別指向兩個單詞的頭結點,請設計乙個盡可能的高效演算法,找出兩個單

詞共同字尾的起始位置,分析演算法時間複雜度。

將n(n>1)個整數存放到一維陣列r中。設計乙個盡可能高效(時間、空間)的算

法,將r中儲存的序列迴圈左移p(07、約瑟夫環問題(josephus問題)是指編號為1、2、…,n的n(n>0)個人按順時針方向圍坐成一圈,現從第s個人開始按順時針方向報數,數到第m個人出列,然後從出列的下乙個人重新開始報數,數到第m的人又出列,…,如此重複直到所有的人全部出列為止。現要求採用迴圈鍊錶結構設計乙個演算法,模擬此過程。

#include<>

typedef int datatype;

typedef struct node

listnode;

typedef listnode *linklist;

void jose(linklist head,int s,int m)

while(k1->next!=k1) /*當迴圈鍊錶中的結點個數大於1時*/

pre->next=p->next; /*輸出該結點,並刪除該結點*/

printf("%4d",p->data);

free(p);

k1=pre->next新的報數起點*/

}printf("%4d",k1->data); /*輸出最後乙個結點*/

free(k1);

}main()

r->next=head; /*生成迴圈鍊錶*/

jose(head,s,m); /*呼叫函式*/}}

8、約瑟夫環問題(josephus問題)是指編號為1、2、…,n的n(n>0)個人按順時針方向圍坐成一圈,現從第s個人開始按順時針方向報數,數到第m個人出列,然後從出列的下乙個人重新開始報數,數到第m的人又出列,…,如此重複直到所有的人全部出列為止。現要求採用迴圈鍊錶結構設計乙個演算法,模擬此過程。

2019四川省JAVA版資料結構考試答題技巧

1 鏈式儲存的儲存結構所佔儲存空間 a a 分兩部分,一部分存放結點值,另一部分存放表示結點間關係的指標 b 只有一部分,存放結點值 c 只有一部分,儲存表示結點間關係的指標 d 分兩部分,一部分存放結點值,另一部分存放結點所佔單元數 2 設單鏈表中指標p指向結點m,若要刪除m之後的結點 若存在 則...

2023年四川省資料總結高階

1 有一種簡單的排序演算法,叫做計數排序 count sorting 這種排序演算法對乙個待排序的表 用陣列表示 進行排序,並將排序結果存放到另乙個新的表中。必須注意的是,表中所有待排序的關鍵碼互不相同,計數排序演算法針對表中的每個記錄,掃瞄待排序的表一趟,統計表中有多少個記錄的關鍵碼比該記錄的關鍵...

2023年四川省資料總結高階

1 請編寫乙個判別給定二叉樹是否為二叉排序樹的演算法,設二叉樹用llink rlink法儲存。2 約瑟夫環問題 josephus問題 是指編號為1 2 n的n n 0 個人按順時針方向圍坐成一圈,現從第s個人開始按順時針方向報數,數到第m個人出列,然後從出列的下乙個人重新開始報數,數到第m的人又出列...