2023年福建省資料總結摘要

2021-11-01 18:37:27 字數 1224 閱讀 9914

1、設一棵二叉樹的結點結構為 (llink,info,rlink),root為指向該二叉樹根結點的指標,p和q分別為指向該二叉樹中任意兩個結點的指標,試編寫一演算法ancestor(root,p,q,r),該演算法找到p和q的最近共同祖先結點r。

2、根據二叉排序樹中序遍歷所得結點值為增序的性質,在遍歷中將當前遍歷結點與其前驅結點值比較,即可得出結論,為此設全域性指標變數pre(初值為null)和全域性變數flag,初值為true。若非二叉排序樹,則置flag為false。

define true 1

define false 0

typedef struct node

datatype data; struct node *llink,*rlink;} *btree;

void judgebst(btree t,int flag)

判斷二叉樹是否是二叉排序樹,本演算法結束後,在呼叫程式中由flag得出結論。 //不是完全二叉樹

judgebst (t->rlink,flag);// 中序遍歷右子樹

judgebst演算法結束

3、4、 void linklist_reverse(linklist &l)

鍊錶的就地逆置;為簡化演算法,假設表長大於2

p=l->next;q=p->next;s=q->next;p->next=null;

while(s->next)

q->next=p;p=q;

q=s;s=s->next; //把l的元素逐個插入新表表頭

q->next=p;s->next=q;l->next=s;

linklist_reverse

4、矩陣中元素按行和按列都已排序,要求查詢時間複雜度為o(m+n),因此不能採用常規的二層迴圈的查詢。可以先從右上角(i=a,j=d)元素與x比較,只有三種情況:一是a[i,j]>x,這情況下向j 小的方向繼續查詢;二是a[i,j]

void search(datatype a[ ][ ], int a,b,c,d, datatype x)

n*m矩陣a,行下標從a到b,列下標從c到d,本演算法查詢x是否在矩陣a中.

i=a; j=d; flag=0; //flag是成功查到x的標誌

while(i<=b && j>=c)

if(a[i][j]==x)

else if (a[i][j]>x) j--; else i++;

if(flag) printf(「a[%d][%d]=%d」,i,j,x假定x為整型.

2023年福建省資料總結摘要

while s next q next p s next q l next s linklist reverse 4 矩陣中元素按行和按列都已排序,要求查詢時間複雜度為o m n 因此不能採用常規的二層迴圈的查詢。可以先從右上角 i a,j d 元素與x比較,只有三種情況 一是a i,j x,這情況...

2023年福建省資料總結大綱

1 根據二叉排序樹中序遍歷所得結點值為增序的性質,在遍歷中將當前遍歷結點與其前驅結點值比較,即可得出結論,為此設全域性指標變數pre 初值為null 和全域性變數flag,初值為true。若非二叉排序樹,則置flag為false。define true 1 define false 0 typede...

2023年福建省資料總結大綱

1 根據二叉排序樹中序遍歷所得結點值為增序的性質,在遍歷中將當前遍歷結點與其前驅結點值比較,即可得出結論,為此設全域性指標變數pre 初值為null 和全域性變數flag,初值為true。若非二叉排序樹,則置flag為false。define true 1 define false 0 typede...