早教吧 育儿知识 作业答案 考试题库 百科 知识分享

2.设有一组初始记录关键字为(35,60,48,24,66,78),进行直接插入排序和冒泡排序。(20分)3.已知二叉树的后序遍历序列是DBFGECA,中序遍历序列是DBAFEGC,并给出先序遍历。(10分)急求答

题目详情
2.设有一组初始记录关键字为(35,60,48,24,66,78),进行直接插入排序和冒泡排序。(20分)
3.已知二叉树的后序遍历序列是DBFGECA,中序遍历序列是DBAFEGC,并给出先序遍历。(10分)
急求答案
▼优质解答
答案和解析
#include <iostream>
using namespace std;
 
#define  MAX_SIZE 6
 
typedef struct 
{
    int r[MAX_SIZE+1];  // 用于存储要排序数组,r[0]用作哨兵或临时变量
    int length;         // 用于记录顺序表的长度
}SqList;
 
// 交换L中数组r的下标为i和j的值
void swap(SqList *L,int i,int j){
    int temp=L->r[i];
    L->r[i]=L->r[j];
    L->r[j]=temp;
}
 
// 对顺序表L做直接插入排序 
void insert_sort(SqList *L){
    int i,j;
    for (i=2;i<=L->length;i++)
    {
        if(L->r[i]<L->r[i-1]){
            L->r[0]=L->r[i];  // 设置哨兵
            for(j=i-1;L->r[j]>L->r[0];j--) L->r[j+1]=L->r[j]; // 元素后移
            L->r[j+1]=L->r[0]; // 将较小的元素插入刚才较大元素的位置
        }
    }
}
 
void print(SqList *L){
    int i;
 
    for (i =1; i <L->length; i++) cout<<L->r[i]<<",";
    cout<<L->r[i]<<endl;
}
 
int main()
{
    SqList list;
    list.r[0]=0;
    list.r[1]=35;
    list.r[2]=60;
    list.r[3]=48;
    list.r[4]=24;
    list.r[5]=66;
    list.r[6]=78;
    list.length=6;
 
    printf("直接插入排序前:");
    print(&list);
    insert_sort(&list);
    printf("直接插入排序后:");
    print(&list);
 
    return 0;
}

// 冒泡算法略,因为它太简单了。留给楼主思考吧。

3.先序是:



ADBCEGF

看了 2.设有一组初始记录关键字为...的网友还看了以下: