//聯系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄
一、字符串逆序輸出
1、實現一個字符串“how are you”的逆序輸出(編程語言不限)。如給定字符串為“hello world”,輸出結果應當為“world hello”。
[cpp] view plain copy
intspliterFunc(char*p) {
charc[100][100];
inti =0;
intj =0;
while(*p !='\0') {
if(*p ==' ') {
i++;
j =0;
}else{
c[i][j] = *p;
j++;
}
p++;
}
for(intk = i; k >=0; k--) {
printf("%s", c[k]);
if(k >0) {
printf(" ");
}else{
printf("\n");
}
}return0;
}
二、二叉樹
/**
二叉樹的先序遍歷為FBACDEGH,中序遍歷為:ABDCEFGH,請寫出這個二叉樹的后序遍歷結果。
ADECBHGF
先序+中序遍歷還原二叉樹:先序遍歷是:ABDEGCFH中序遍歷是:DBGEACHF
首先從先序得到第一個為A,就是二叉樹的根,回到中序,可以將其分為三部分:
左子樹的中序序列DBGE,根A,右子樹的中序序列CHF
接著將左子樹的序列回到先序可以得到B為根,這樣回到左子樹的中序再次將左子樹分割為三部分:
左子樹的左子樹D,左子樹的根B,左子樹的右子樹GE
同樣地,可以得到右子樹的根為C
類似地將右子樹分割為根C,右子樹的右子樹HF,注意其左子樹為空
如果只有一個就是葉子不用再進行了,剛才的GE和HF再次這樣運作,就可以將二叉樹還原了。
*/
三、歸并排序
voidmerge(intsourceArr[],inttempArr[],intstartIndex,intmidIndex,intendIndex) {
inti = startIndex;
intj = midIndex +1;
intk = startIndex;
while(i != midIndex +1&& j != endIndex +1) {
if(sourceArr[i] >= sourceArr[j]) {
tempArr[k++] = sourceArr[j++];
}else{
tempArr[k++] = sourceArr[i++];
}
}
while(i != midIndex +1) {
tempArr[k++] = sourceArr[i++];
}
while(j != endIndex +1) {
tempArr[k++] = sourceArr[j++];
}
for(i = startIndex; i <= endIndex; i++) {
sourceArr[i] = tempArr[i];
}
}
voidsort(intsouceArr[],inttempArr[],intstartIndex,intendIndex) {
intmidIndex;
if(startIndex < endIndex) {
midIndex = (startIndex + endIndex) /2;
sort(souceArr, tempArr, startIndex, midIndex);
sort(souceArr, tempArr, midIndex +1, endIndex);
merge(souceArr, tempArr, startIndex, midIndex, endIndex);
}
}
intmain(intargc,constchar* argv[]) {
intnumArr[10] = {86,37,56,29,92,73,15,63,30,8};
inttempArr[10];
sort(numArr, tempArr,0,9);
for(inti =0; i <10; i++) {
printf("%d, ", numArr[i]);
}
printf("\n");
return0;
}
謝謝!!!