//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄
一、字符串逆序输出
1、实现一个字符串“how are you”的逆序输出(编程语言不限)。如给定字符串为“hello world”,输出结果应当为“world hello”。
[cpp] view plain copy
int spliterFunc(char *p) {
char c[100][100];
int i =0;
int j =0;
while (*p !='\0') {
if (*p ==' ') {
i++;
j = 0;
} else {
c[i][j] = *p;
j++;
}
p++;
}
for (int k = 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再次这样运作,就可以将二叉树还原了。
*/
三、归并排序
void merge(int sourceArr[],int tempArr[], int startIndex,int midIndex, int endIndex) {
int i = startIndex;
int j = midIndex +1;
int k = 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];
}
}
void sort(int souceArr[],int tempArr[], int startIndex,int endIndex) {
int midIndex;
if (startIndex
midIndex = (startIndex + endIndex) / 2;
sort(souceArr, tempArr, startIndex, midIndex);
sort(souceArr, tempArr, midIndex +1, endIndex);
merge(souceArr, tempArr, startIndex, midIndex, endIndex);
}
}
int main(int argc,const char * argv[]) {
int numArr[10] = {86,37, 56,29, 92,73, 15,63, 30,8};
int tempArr[10];
sort(numArr, tempArr, 0,9);
for (int i =0; i <10; i++) {
printf("%d, ", numArr[i]);
}
printf("\n");
return0;
}