歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

《數(shù)據(jù)結(jié)構(gòu)》程序填空復(fù)習(xí)題(總13頁)

  • 資源ID:34244415       資源大小:49.50KB        全文頁數(shù):13頁
  • 資源格式: DOC        下載積分:20積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要20積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 微信支付   
驗(yàn)證碼:   換一換

 
賬號:
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

《數(shù)據(jù)結(jié)構(gòu)》程序填空復(fù)習(xí)題(總13頁)

《數(shù)據(jù)結(jié)構(gòu)》程序填空復(fù)習(xí)題 說明:本文檔中涉及到的算法并非本書的全部,有些可根據(jù)此處的情況自行看書和作業(yè)題,黑色為綜合練習(xí)上的題目,紅色為我另增加的題,這些空的選擇是根據(jù)我個(gè)人的經(jīng)驗(yàn)來決定的并不能完全代表中央電大的出卷老師,因此一定不能有肯定就考這些題目的想法。不能放棄其他內(nèi)容的復(fù)習(xí),切記!?。? 一、線性表 1.設(shè)線性表為(6,10,16,4),以下程序用說明結(jié)構(gòu)變量的方法建立單向鏈表,并輸出鏈表中各結(jié)點(diǎn)中的數(shù)據(jù)。 #define NULL 0 void main( ) {NODE a,b,c,d,*head,*p; a.data=6; b.data=10; c.data=16; d.data=4; /*d是尾結(jié)點(diǎn)*/ head= (1) ; a.next=&b; b.next=&c; c.next=&d; (2) ; /*以上結(jié)束建表過程*/ p=head; /*p為工作指針,準(zhǔn)備輸出鏈表*/ do {printf(“%d\n”, (3) ); (4) ; }while( (5) ); } 答案: (1)&a (2)dnext=NULL (3)p->data (4)p=p->next (5)p!=NULL 2. 以下函數(shù)在head為頭指針的具有頭結(jié)點(diǎn)的單向鏈表中刪除第i個(gè)結(jié)點(diǎn), struct node { int data; struct node *next; }; typedef struct node NODE int delete(NODE *head,int i ) { NODE *p,*q; int j; q=head; j=0; while((q!=NULL)&&( ___(1)_____)) { ___(2)_____; j++; } if(q==NULL) return(0); p= ___(3)_____; ___(4)_____=p->next; free(___(5)_____); return(1); } 答案: (1)j<i-1 (2)q=q->next (3)q->next (4)q->next (5)p 3.將新元素插入到線性表中的第i位,MAX是數(shù)組的個(gè)數(shù),a[0]用以存放線性表長度,b存放待插入的元素值,i存放插入的位置,n存放線性表長度 { int a[MAX]; int i,j,b,n; scanf(“%d%d%d”,&b,&i,&n); for(j=1;j<=n;j++) scanf(“%d”,&a[j]); a[0]=n; for(j=n; (1) ;j- -) (2) ; (3) ; (4) ; for(j=1;j<=a[0];j++) printf(“%5d\n”,a[j]); } 答案: (1)j>=i (2)a[j+1]=a[j] (3)a[i]=b (4)a[0]=n+1 4.用頭插法建立帶頭結(jié)點(diǎn)且有n個(gè)結(jié)點(diǎn)的單向鏈表的算法 NODE *create(n) { NODE *head,*p,*q; int i p=(NODE *)malloc(sizeof(NODE)); (1) ; (2) ; (3) ; for(i=1;i<=n;i++) { p=(NODE *)malloc(sizeof(NODE)); p->data=i; if(i==1) (4) ; else { (5) ; (6) ; } } return(head); } 答案: (1)head=p (2)p->next=NULL (3)q=p (4)p->next=NULL (5)p->next=q->next (6)q->next=p 一、 棧 1. 以下函數(shù)為鏈棧的進(jìn)棧操作,x是要進(jìn)棧的結(jié)點(diǎn)的數(shù)據(jù)域,top為棧頂指針 struct node { ElemType data; struct node *next; }; struct node *top ; void Push(ElemType x) { struct node *p; p=(struct node*)malloc(___(1)_____); p->data=x; ___(2)_____; } 答案: (1)sizeof (struct node) (2)p->next=top (3)top=p 二、 隊(duì)列 1. 以下函數(shù)為鏈隊(duì)列的入隊(duì)操作,x為要入隊(duì)的結(jié)點(diǎn)的數(shù)據(jù)域的值,front、rear分別是鏈隊(duì)列的隊(duì)頭、隊(duì)尾指針 struct node { ElemType data; struct node *next; }; struct node *front,*rear; void InQueue(ElemType x) { struct node *p; p= (struct node*) ___(1)_____; p->data=x; p->next=NULL; ___(2)_____; rear= ___(3)_____; } 答案: (1)malloc(sizeof (struct node)) (2)rear->next=p (3)p 2. 以下函數(shù)為鏈隊(duì)列的出隊(duì)操作(鏈隊(duì)列帶有頭結(jié)點(diǎn)),出隊(duì)結(jié)點(diǎn)的數(shù)據(jù)域的值由x返回,front、rear分別是鏈隊(duì)列的隊(duì)頭、隊(duì)尾指針 struct node { ElemType data; struct node *next; }; struct node *front,*rear; ElemType OutQueue() { ElemType x; if(___(1)_____) { printf("隊(duì)列下溢錯誤!\n"); exit(1); } else { struct node *p=front->next; x=p->data; front->next= ___(2)_____; if(p->next==NULL) rear=front; free(p); ___(3)_____; } } 答案: (1)front= =rear (2)p->next (3)return(x) 三、 樹 1.以下程序是先序遍歷二叉樹的遞歸算法的程序,完成程序中空格部分(樹結(jié)構(gòu)中左、右指針域分別為left和right,數(shù)據(jù)域data為字符型,BT指向根結(jié)點(diǎn))。 void Preorder (struct BTreeNode *BT) { if(BT!=NULL){ (1) ; (2) ; (3) ; } } 答案: (1)printf(“%c”,BT->data) (2)Preorder(BT->left) (3)Preorder(BT->right) 2. 以下程序是中序遍歷二叉樹的遞歸算法的程序,完成程序中空格部分(樹結(jié)構(gòu)中左、右指針域分別為left和right,數(shù)據(jù)域data為字符型,BT指向根結(jié)點(diǎn))。 void Inorder (struct BTreeNode *BT) { if(BT!=NULL){ (1) ; (2) ; (3) ; } } 答案: (1)Inorder(BT->left) (2)printf(“%c”,BT->data) (3)Inorder(BT->right) 3 以下程序是后序遍歷二叉樹的遞歸算法的程序,完成程序中空格部分(樹結(jié)構(gòu)中左、右指針域分別為left和right,數(shù)據(jù)域data為字符型,BT指向根結(jié)點(diǎn))。 void Postorder (struct BTreeNode *BT) { if(BT!=NULL){ (1) ; (2) ; (3) ; } } 答案: (1)Postorder(BT->left) (2)Postorder(BT->right) (3)printf(“%c”,BT->data); 四、 圖 五、 排序 1.以下冒泡法程序?qū)Υ娣旁赼[1],a[2],……,a[n]中的序列進(jìn)行排序,完成程序中的空格部分,其中n是元素個(gè)數(shù),要求按升序排列。 void bsort (NODE a[ ], int n) { NODE temp; int i,j,flag; for(j=1; (1) ;j++); {flag=0; for(i=1; (2) ;i++) if(a[i].key>a[i+1].key) {flag=1; temp=a[i]; (3) ; (4) ; } if(flag= =0)break; } } 程序中flag的功能是(5) 答案: (1)j<=n-1 (2)i<=n-j (3)a[i]=a[i+1] (4)a[i+1]=temp (5)當(dāng)某趟冒泡中沒有出現(xiàn)交換則已排好序,結(jié)束循環(huán) 2. 以下函數(shù)為直接選擇排序算法,對a[1],a[2],…a[n]中的記錄進(jìn)行直接選擇排序,完成程序中的空格 typedef struct { int key; …… }NODE; void selsort(NODE a[],int n) { int i,j,k; NODE temp; for(i=1;i<= ___(1)_____;i++) { k=i; for(j=i+1;j<= ___(2)_____;j++) if(a[j].key<a[k].key) __(3)______; if(i!=k) { temp=a[i]; ___(4)_____; ____(5)____; } } } 答案: (1)n-1 (2)n (3)k=j (4)a[i]=a[k] (5)a[k]=temp 3.直接插入排序算法 Void disort(NODE a[],int n) { int I,j; NODE temp; for(i=1;i<n;i++) { temp=a[i]; (1) ; while(j>=0&&temp.key<a[j].key) { (2) ; (3) ; } (4) ; } } 答案: (1)j=i-1 (2)a[j+1]=a[j] (3)j-- (4)a[j+1]=temp 4.快速排序 void quicksort(NODE a[],int start,int end) { int iI,j; NODE mid; if(start>=end) return; (1) ; (2) ; mid=a[i]; while( (3) ) { while(i<j)&&a[j].key>mid.key) (4) ;; if( (5) ;) { (6) ;; (7) ;; } while(i<j&&a[i].key<=mid.key) (8) ;; if(i<j) { (9) ;; (10) ;; } } a[i]=mid; (11) ;; ; } 答案: (1)i=start (2)j=end (3)i<j (4)j-- 也可能將此條語句寫出,要填寫其條件中的a[j].key>mid.key (5)i<j (6)a[i]=a[j] (7)i++ (8)i++ 也可能將此條語句寫出,要填寫其條件中的a[i].key<=mid.key (9)a[j]=a[i] (10)j-- (11)quicksort(a,start,i-1) (12)quicksort(a,i+1,end) 最后兩句要填的概率會很高,要注意快速排序的考點(diǎn)很多,一般只會有三到四個(gè)空。 5.直接選擇排序 void selsort(NODE a[],int n) { int i,j,k; NODE temp; for(i=1;i<=n-1;i++) { (1) ; for(j= (2) ;j<=n;j++) if(a[j].key<a[k].key) (3) ; if( (4) ) { (5) ; (6) ; (7) ; } } } 答案: (1)k=i (2)i+1 (3)k=j (4)i!=k (5)temp=a[i] (6)a[i]=a[k] (7)a[k]=temp 前四句較為重要 6.堆排序中的篩選算法 void heapshift(NODE a[],int I,int n) { NODE temp;int j; temp=a[i]; (1) ; while(j<n) { if(j+1<n&&a[j].key>a[j+1].key) (2) ; if(temp.key>a[j].key) { (3) ; (4) ; (5) ; } else break; } (6) ; } 答案: (1)j=2*i (2)j++ (3)a[i]=a[j] (4)i=j (5)j=2*i (6)a[i]=temp 這是構(gòu)建的小根堆,若是大根堆,只要將if語句中的a[j].key>a[j+1].key改為<,再將第二個(gè)if語句中的>改為<即可 7.堆排序 void heapsort(NODE a[],int n) { int i NODE temp; for(i= (1) ;i>=1;i--) (2) ; for(i=n;i>1;i--) { temp=a[1]; (3) ; (4) ; (5) ; } } 答案: (1)n/2 (2)heapshift(a,i,n) (3)a[1]=a[i] (4)a[i]=temp (5)heapshift(a,1,i-1) 8.兩個(gè)有序序列的歸并 void merge(NODE a[],int s,int m,int n,NODE order[]) { int i=s,j=m+1,k=s; while(( (1) )&&( (2) )) if(a[i].key<=a[j].key) (3) ; else (4) ; if(i>m) while(j<=n) (5) ; Else While(i<=m) (6) ; } 答案: (1)i<=m (2)j<=n (3)order[k++]=a[i++] 可保留此句,將其條件語句去掉 (4)order[k++]=a[j++] 可保留此句,將其條件語句去掉 (5)Order[k++]=a[j++] 可保留此句,將其條件語句去掉 (6)order[k++]=a[i++] 可保留此句,將其條件語句去掉 第(3)(4)空與第(5)(6)空有較直接的關(guān)聯(lián),因此一般情況下若要求填(3)(4)就不會要求填(5)(6),若(5)(6)位要填也是填其條件句 七、查找 1. 以下函數(shù)在a[0]到a[n-1]中,用折半查找算法查找關(guān)鍵字等于k的記錄,查找成功返回該記錄的下標(biāo),失敗時(shí)返回-1,完成程序中的空格 typedef struct { int key; …… }NODE; int Binary_Search(NODE a[],int n, int k) { int low,mid,high; low=0; high=n-1; while(___(1)_____) { mid=(low+high)/2; if(a[mid].key==k) return __(2)______; else if(___(3)_____) low=mid+1; else __(4)______; } ___(5)_____; } 答案: (1)low<=high (2)mid (3)a[mid].key<k; (4)high=mid-1 (5)return -1; 此為折半查找的非遞歸算法 2. 1. 以下函數(shù)在a[0]到a[n-1]中,用折半查找的遞歸算法查找關(guān)鍵字等于k的記錄,查找成功返回該記錄的下標(biāo),失敗時(shí)返回-1,完成程序中的空格 int Binary_Search(NODE a[],int low,int high,int k) { if(low<=high) { int mid= (1) ; if( (2) ) return mid; else if( (3) ) (4) ; else (5) ;; } else return -1; } 答案: (1)mid=(low+high)/2 (2)a[mid].key==k (3)a[mid].key<k (4)return(a[],low,mid-1,k) (5)return(a[],mid+1,high,k) 3. 以下函數(shù)是二叉排序樹的查找算法,若二叉樹為空,則返回根結(jié)點(diǎn)的指針,否則,返回值是指向樹結(jié)點(diǎn)的結(jié)構(gòu)指針p(查找成功p指向查到的樹結(jié)點(diǎn),不成功p指向?yàn)镹ULL)完成程序中的空格 typedef struct Bnode { int key; struct Bnode *left; struct Bnode *right; } Bnode; Bnode *BSearch(Bnode *bt, int k) /* bt用于接收二叉排序樹的根結(jié)點(diǎn)的指針,k用以接收要查找的關(guān)鍵字*/ { Bnode *p; if(bt== ___(1)_____) return (bt); p=bt; while(p->key!= __(2)______) { if(k<p->key) ___(3)_____; else ___(4)_____; if(p==NULL) break; } Return(___(5)_____); } 答案: (1)NULL (2)k (3)p=p->left (4)p=p->right (5)p

注意事項(xiàng)

本文(《數(shù)據(jù)結(jié)構(gòu)》程序填空復(fù)習(xí)題(總13頁))為本站會員(29)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  sobing.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!