大連東軟數據結構編程題.docx_第1頁
大連東軟數據結構編程題.docx_第2頁
大連東軟數據結構編程題.docx_第3頁
大連東軟數據結構編程題.docx_第4頁
大連東軟數據結構編程題.docx_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數據結構編程題1) 題1完成函數f的實現,參數a為int數組首地址,len為數組長度,要求函數f能夠將數組元素重新排列奇數在前,偶數在后。 答案:void f(int *a, int len) int i, j;for(i=0; ilen-1; i+) int flg=1;for(j=0; jlen-1-i; j+) if(aj%2=0 & aj+1%2) int tmp=aj;aj=aj+1;aj+1=tmp;flg=0;if(flg) break;2) 題2完成函數f的實現,參數a為int數組的首地址,len為數組長度,要求函數f能夠返回數組最大元素的個數。答案:int f(const int *a, int len) int i, max=0, cnt=1;/max用于保存最大元素的序號,cnt用于記錄個數 for(i=1; ilen; i+)if(amaxai) max=i;cnt=1; else if(amax=ai) +cnt;return cnt;3) 題3完成函數f的實現,參數a為int數組的首地址,len為數組長度,要求函數f能夠將數組元素按照個位排降序,同時要求使用的算法要保證排序穩(wěn)定性。答案:解法一:(插入排序)void f(int *a, int len) int i, j, tmp;for(i=1; ia0%10) /對某數進行%10運算,即可獲取其個位上的值 for(j=i-1; tmp%10aj%10; -j)aj+1=aj;aj+1=tmp; else for(j=i; j0; -j)aj=aj-1;a0=tmp;解法二:(冒泡排序)void f(int *a, int len) int i, j, flg, tmp;for(i=0; ilen-1; +i) flg=0;for(j=0; jaj%10) tmp=aj+1; aj+1=aj;aj=tmp;if(flg=0) break;4) 題4完成函數f的實現,參數a為int數組首地址,len數組長度,要求函數f返回數組中元素是否構成大根堆,是返回1,否返回0.答案:_Bool f(const int *a, int len) int i;for(i=(len-1)/2; i=0; -i) if(aia2*(i+1)-1 | aia2*(i+1) return false;return true;5) 題5完成函數f的實現,參數a為int數組首地址,len為數組長度,x為一個整數,假設數組元素已排好降序,要求函數f運用折半查找算法,查找數組中是否存在x,存在返回1,不存在返回0。答案:_Bool f(const int *a, int len, int x) int low=0, high=len-1, mid=(low+high)/2;while(lowhigh) if(amid=x) return true; else if(amidx) low=mid+1;mid=(low+high)/2;return false;6) 題6完成函數f的實現,參數s和t分別表示兩個字符串首地址,要求函數f返回字符串t在字符串s中出現的次數,例如:f(“aaa”, “aa”)返回2。答案:int f(const char *s, const char *t) int len1=strlen(s), len2=strlen(t), i, num=0;for(i=0 ;itail=NULL)return false;Node *cur=lp-tail;lp-tail=cur-p;if(lp-tail=NULL)lp-head=NULL;elselp-tail-n=NULL;free(cur);return true;8) 題8代碼中,結構體Node表示二叉樹節(jié)點,其中l(wèi)eft指向左孩子,right指向右孩子;完成函數f的實現,參數root表示二叉樹根節(jié)點指針,要求函數f返回該樹的深度,提示可用先序遍歷。答案:int f(const Node *root) if(root=NULL)return 0;int l=f(root-left);int r=f(root-right);return lr?l+1:r+1;9) 題9代碼中,結構體Node表示二叉樹節(jié)點,其中l(wèi)eft指向左孩子,right指向右孩子;完成函數f的實現,參數root表示二叉樹根節(jié)點指針,要求函數f釋放該樹全部節(jié)點占用的內存(假設節(jié)點內存來自堆區(qū)),提示可用后序遍歷。答案:int f(Node *root) if(root=NULL)return;f(root-left);f(root-right);free(root);10) 題10代碼中,結構體Node表示單鏈表的節(jié)點,data是整型數據域,next是指向后繼的指針;完成函數f的實現,參數head是某鏈表的頭節(jié)點,參數x表示一個整數,要求函數f返回鏈表中數據域大于x的節(jié)點的個數。答案:int f(Node *head, int x) Node *p;int cnt=0;for(p=head; p!=NULL; p=p-next)if(p-datax)cnt+;return cnt;11) 題11完成函數f的實現,參數n表示正整數,參數a表示二維數組首地址,a表示的二維數組用于存儲n個系欸但有向圖的鄰接矩陣,aij=1時表示節(jié)點i到節(jié)點j有邊,函數f需要返回有向圖中出度大于入度的頂點的個數。答案:int f(int n, const _Bool ann) int i, j, cnt=0;for(i=0; in; i+) int in=0, out=0;for(j=0; jin)cnt+;return cnt;12) 題12完成函數f的實現,參數n表示正整數,參數a表示一個一位數組首地址,i表示一個正整數(0=in),a表示的一維數組用于存儲n個節(jié)點無向圖的鄰接矩陣的上三角壓縮存儲,函數f需要返回無向圖中節(jié)點i的度。答案:int f(int n, const _Bool a, int i) int j, k=0;int m=n-i;for(j=0; ji; j+)k+=(n-);int cnt=0;for(j=k; j0)stack-;elsereturn false;if(stack=0)return true;return false;14) 題14完成函數f的實現,參數s1和s2分別表示兩個字符串首地址,要求函數f實現不區(qū)分大小寫字母的字符串比較,當s1比s2小時f返回負數,當s1比s2大時返回正數,字母串相等返回0。答案int f(const char *s1, const char *s2) int i;for(i=0; s1i!=0 | s2i!=0; i+)if(s1i=s2i) continue; else if(s1i=A & s1i=a & s1i=A & s2i=a & s2is2i) return 1; else return -1;return 0;15) 題15完成函數f的實現,參數a、b、c表示三個int數組的首地址,la和lb表示數組a和b的長度,假設數組a和b存在升序。要求函數f完成將數組a和b的內容歸并到數組c中,即a和b的內容復制至數組c后,c也有升序,同時當a和b中存在相等元素時,需要優(yōu)先向c中寫入a中的等

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論