数据结构经典例题解析C/C++代码实现(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FlushHip/article/details/83025619

第一题

题目

编一C程序,它能把读入的整数依次插入到一个初始为空的二叉排序树中,一直读到-9999为止(-9999不插入该二叉排序树)。输出该二叉排序树的前序序列、后序序列及叶结点的个数。(输入时,两个相邻的整数用空格隔开)。

解析

这个代码可以参考二叉树的遍历二叉树前序、中序、后序遍历的非递归写法

第二题

题目

编一C程序,它能对输入的一串整数(不多于1000个,以-9999为结束标记)到数组a中,再对a的元素进行直接插入排序(从小到大排序),输出排序结果和所用关键字比较次数。(输入时,两个相邻的整数用空格隔开)。

解析

插入排序,这个要好好看看,很多排序算法,例如希尔排序,堆排序等等都是依赖于插入排序。

更详细的代码可以参考插入排序

C语言

#define END -9999
#define MAX_SIZE 1005

int array[MAX_SIZE], n;
int cnt;

void InsertSort()
{
    int i, j, k, tmp;

    for (cnt = 0, i = 1; i < n; ++i) {
        for (j = i - 1; j >= 0 && array[j] > array[i]; ++cnt, --j) {}
        tmp = array[i];
        for (k = i; k > j + 1; array[k] = array[k - 1], --k) {}
        array[j + 1] = tmp;
    }
}

int main()
{
    int x;
    for (n = 0; scanf("%d", &x) && x != END; array[n++] = x) {}

    InsertSort();

    printf("%d\n", cnt);
    for (x = 0; x < n; printf("%d%c", array[x], " \n"[x + 1 == n]), ++x) {}
    return 0;
}

猜你喜欢

转载自blog.csdn.net/FlushHip/article/details/83025619