1. 程式人生 > >資料結構經典例題解析C/C++程式碼實現(二)

資料結構經典例題解析C/C++程式碼實現(二)

第一題

題目

編一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; }