第一篇:大連東軟數據結構編程題
數據結構編程題
1)題1 完成函數f的實現,參數a為int數組首地址,len為數組長度,要求函數f能夠將數組元素重新排列奇數在前,偶數在后。
答案:
void f(int *a, intlen){ inti, j;for(i=0;i intflg=1; for(j=0;j if(a[j]%2==0 && a[j+1]%2){ inttmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; flg=0; } } if(flg)break;} } 2)題2 完成函數f的實現,參數a為int數組的首地址,len為數組長度,要求函數f能夠返回數組最大元素的個數。 答案: int f(constint *a, intlen){ inti, max=0, cnt=1;//max用于保存最大元素的序號,cnt用于記錄個數 for(i=1;i max=i; cnt=1;} else if(a[max]==a[i]){ ++cnt;} return cnt;} 3)題3 完成函數f的實現,參數a為int數組的首地址,len為數組長度,要求函數f能夠將數組元素按照個位排降序,同時要求使用的算法要保證排序穩定性。 答案: 解法一:(插入排序) void f(int *a, intlen){ inti, j, tmp;for(i=1;i tmp=a[i]; } } if(!(a[i]%10>a[0]%10)){//對某數進行%10運算,即可獲取其個位上的值 for(j=i-1;tmp%10>a[j]%10;--j) a[j+1]=a[j];a[j+1]=tmp;} else { for(j=i;j>0;--j) a[j]=a[j-1];a[0]=tmp;} 解法二:(冒泡排序) void f(int *a, intlen){ inti, j, flg, tmp;for(i=0;i flg=0; for(j=0;j if(a[j+1]%10>a[j]%10){ tmp=a[j+1]; a[j+1]=a[j]; a[j]=tmp; } if(flg=0) break;} } 4)題4 完成函數f的實現,參數a為int數組首地址,len數組長度,要求函數f返回數組中元素是否構成大根堆,是返回1,否返回0.答案: _Bool f(constint *a, intlen){ inti;for(i=(len-1)/2;i>=0;--i){ if(a[i] return false; } } return true;} 5)題5 完成函數f的實現,參數a為int數組首地址,len為數組長度,x為一個整數,假設數組元素已排好降序,要求函數f運用折半查找算法,查找數組中是否存在x,存在返回1,不存在返回0。 答案: _Bool f(constint *a, intlen, int x){ int low=0, high=len-1, mid=(low+high)/2;while(low if(a[mid]==x){ return true; } else if(a[mid] high=mid; } else if(a[mid]>x){ 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;i if(strncmp(s+i, t, len2)==0) ++num;return num;} 7)題7 代碼中,結構體Node表示雙鏈表節點,其中p指向前驅,n指向后繼;結構體List表示鏈表,指針head指向鏈表頭節點,tail指向鏈表尾節點,當鏈表為空時,head和tail為0(NULL)。完成函數f的實現,參數lp表示鏈表結構的指針,要求函數f能夠刪除lp指向鏈表的尾節點,并釋放內存(假設鏈表節點內存來自堆區),函數f的返回值表示刪除操作是否成功,成功返回1,否則返回0。 答案: _Bool f(List *lp){ if(lp->tail==NULL) return false;Node *cur=lp->tail;lp->tail=cur->p;if(lp->tail==NULL) lp->head=NULL;else lp->tail->n=NULL;free(cur);return true;} 8)題8 代碼中,結構體Node表示二叉樹節點,其中left指向左孩子,right指向右孩子;完成函數f的實現,參數root表示二叉樹根節點指針,要求函數f返回該樹的深度,提示可用先序遍歷。 答案: int f(const Node *root){ if(root==NULL) return 0;int l=f(root->left);int r=f(root->right);return l>r?l+1:r+1;} 9)題9 代碼中,結構體Node表示二叉樹節點,其中left指向左孩子,right指向右孩子;完成函數f的實現,參數root表示二叉樹根節點指針,要求函數f釋放該樹全部節點占用的內存(假設節點內存來自堆區),提示可用后序遍歷。 答案: int f(Node *root){ if(root==NULL) return;f(root->left);f(root->right);free(root);} 10)題10 代碼中,結構體Node表示單鏈表的節點,data是整型數據域,next是指向后繼的指針;完成函數f的實現,參數head是某鏈表的頭節點,參數x表示一個整數,要求函數f返回鏈表中數據域大于x的節點的個數。答案: int f(Node *head, int x){ Node *p;intcnt=0;for(p=head;p!=NULL;p=p->next) if(p->data>x) cnt++;return cnt;} 11)題11 完成函數f的實現,參數n表示正整數,參數a表示二維數組首地址,a表示的二維數組用于存儲n個系欸但有向圖的鄰接矩陣,a[i][j]==1時表示節點i到節點j有邊,函數f需要返回有向圖中出度大于入度的頂點的個數。 答案: int f(int n, const _Bool a[n][n]){ inti, j, cnt=0;for(i=0;i int in=0, out=0; for(j=0;j if(a[j][i]) in++; if(a[i][j]) out++; if(out>in) cnt++;} return cnt;} 12)題12 完成函數f的實現,參數n表示正整數,參數a表示一個一位數組首地址,i表示一個正整數(0<=i int f(int n, const _Bool a[], inti){ int j, k=0;int m=n-i;for(j=0;j k+=(n--);intcnt=0;for(j=k;j if(a[j]) cnt++;return cnt;} 13)題13 完成函數f的實現,參數s表示字符串首地址,字符串中僅有‘(’和‘)’,函數f返回一個布爾值,當字符串中的‘(’和‘)’恰好匹配時返回真,否則返回假。 答案: _Bool f(const char *s){ } int stack=0, i;//stack表示棧,stack=0時???for(i=0;s[i]!='
主站蜘蛛池模板:
97精品伊人久久大香线蕉|
囯产精品久久久久久久久久|
亚洲欧美日韩综合在线丁香|
国产香蕉视频在线播放|
97午夜理论片在线影院|
亚洲日韩精品看片无码|
牲欲强的熟妇农村老妇女|
精品无码av一区二区三区不卡|
亚洲熟妇中文字幕日产无码|
国产无套露脸在线观看|
精品无人区卡一卡二卡三乱码|
亚洲国产成人精品无码区一本|
精品国产aⅴ无码一区二区|
国产精品成人观看视频|
欧美人与动牲交大全免费|
一本色道久久综合亚洲精品|
99久久综合狠狠综合久久止|
av国産精品毛片一区二区三区|
亚洲欧洲日产国码高潮αv|
在线播放免费人成视频在线观看|
亚洲国产高清av网站|
痉挛高潮喷水av无码免费|
久久久久久成人综合网|
少妇高清一区二区免费看|
闺蜜张开腿让我爽了一夜|
国内精品免费久久久久电影院97|
日本成片区免费久久|
久久九九日本韩国精品|
浪潮av激情高潮国产精品|
一区二区三区在线观看亚洲电影|
久久久午夜精品福利内容|
长腿校花无力呻吟娇喘的视频|
国产精品国产三级在线专区|
中文无码制服丝袜人妻av|
风韵丰满熟妇啪啪区老老熟妇|
成人欧美一区二区三区黑人|
亚洲日本va中文字幕久久|
色先锋影音岛国av资源|
麻豆人人妻人人妻人人片av|
亚洲午夜性猛春交xxxx|
日本少妇毛茸茸高潮|