2023年山西省資料分析基礎

2022-11-11 18:06:05 字數 1232 閱讀 9481

1、假設以i和o分別表示入棧和出棧操作。棧的初態和終態均為空,入棧和出棧的操作序列可表示為僅由i和o組成的序列,稱可以操作的序列為合法序列,否則稱為非法序列。(15分)

(1)a和d是合法序列,b和c是非法序列。(2)設被判定的操作序列已存入一維陣列a中。int judge(char a)

//判斷字元陣列a中的輸入輸出序列是否是合法序列。如是,返回true,否則返回false。

}i++; //不論a[i]是『i』或『o』,指標i均後移。}

if(j!=k) else }//演算法結束。

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 (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、在有向圖g中,如果r到g中的每個結點都有路徑可達,則稱結點r為g的根結點。編寫乙個演算法完成下列功能:(1).建立有向圖g的鄰接表儲存結構;(2).判斷有向圖g是否有根,若有,則列印出所有根結點的值。

2023年山西省資料總結基礎

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

2019山西省資料結構分析深入

1 請編寫乙個判別給定二叉樹是否為二叉排序樹的演算法,設二叉樹用llink rlink法儲存。2 設有乙個陣列中存放了乙個無序的關鍵序列k1 k2 kn。現要求將kn放在將元素排序後的正確位置上,試編寫實現該功能的演算法,要求比較關鍵字的次數不超過n。51.借助於快速排序的演算法思想,在一組無序的記...

2019吉林省資料分析基礎

1 給定n個村莊之間的交通圖,若村莊i和j之間有道路,則將頂點i和j用邊連線,邊上的wij表示這條道路的長度,現在要從這n個村莊中選擇乙個村莊建一所醫院,問這所醫院應建在哪個村莊,才能使離醫院最遠的村莊到醫院的路程最短?試設計乙個解答上述問題的演算法,並應用該演算法解答如圖所示的例項。20分 2 後...