//联系人:石虎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;
}
谢谢!!!