西南交通大學計算機專業考研真題答案詳解6:2012年演算法設計題
阿新 • • 發佈:2018-11-07
一、考研真題
1、下面是求兩個集合A和B的並集(AUB)的演算法,集合A和集合B分別用單鏈表La和Lb的帶頭結點的單鏈表表示(連結串列中的資料按升序排序),其並集用單鏈表Lc表示(帶頭結點,其資料也按升序排列),請填空完善演算法。(每空2分)。
2、對給定的帶頭結點的單鏈表L,結點值得型別為整型,編寫一個刪除L中值為x的演算法(L中可能有多個值為x的結點,且值得分佈具有隨機性)。(6分)
3、假設將迴圈佇列定義為:
typedef struct { QElemType *base; int rear;//指向迴圈佇列中隊尾元素的位置 int length;//表示佇列中所含資料元素的個數 }SqQueue; SqQueue Q;
試給出次迴圈佇列的隊滿條件,並寫出相應的入佇列和出佇列演算法(在出佇列的演算法中要返回隊頭元素)。(8分)
4、編寫一個遞迴演算法,計算以二叉樹表示的二叉樹T的高度h。(6分)
二、真題解析
2、對給定的帶頭結點的單鏈表L,結點值得型別為整型,編寫一個刪除L中值為x的演算法(L中可能有多個值為x的結點,且值得分佈具有隨機性)。(6分)
typedef struct LNode { int data; struct LNode* next; }LNode,*LinkList; void DeleteLNode(LNode* &L,int x) { if (L==NULL) { return; } LNode *p,*q; p=L; while(p->next!=NULL) { if (p->next->data==x) { q=p->next; p->next=q->next; free(q); }else{ p=p->next; } } }
3、試給出次迴圈佇列的隊滿條件,並寫出相應的入佇列和出佇列演算法(在出佇列的演算法中要返回隊頭元素)。(8分)
//入隊 int EnCQueue(SqQueue &Q, QElemType x) { if(Q.length == MAXQSIZE){ return -1;//迴圈佇列滿 } Q.base[Q.rear] = x; Q.rear=(Q.rear+1)%MAXQSIZE; ++Q.length;//當前元素個數+1 return 0; } //出隊 int DeCQueue(SqQueue &Q, QElemType &x) { if(Q.length==0){ return -1;//迴圈佇列空 } int font=(Q.rear+MAXQSIZE-Q.length)%MAXQSIZE; x = Q.base[font]; --Q.length;//當前元素個數-1 return 0; }
4、編寫一個遞迴演算法,計算以二叉樹表示的二叉樹T的高度h。(6分)
int Heigh(BTNode* btree)
{
if (btree == NULL)
{
return 0;
}
int lheight, rheight;
lheight = Heigh(btree->lchild);
rheight = Heigh(btree->rchild);
if (lheight>rheight)
{
return lheight + 1;
}
else {
return rheight + 1;
}
}