广工anyview数据结构第三章(2021.12)

.

广工anyview数据结构习题第三章,

在学习过程中部分题目参考了Giyn 、戮漠、雁过留痕等大佬的代码,在此感谢。

题目解法不是最优解,但希望能给大家有所启发。同时也发了文档资源,需要可自取。

如果对你有帮助,可以给卑微的博主留个赞、关注、收藏   (不是) 

(骗一下数据,说不定以后面试就过了,拜谢)

目录

DC03PE03

DC03PE06

DC03PE23


DC03PE03

【题目】试以顺序表L的L.rcd[L.length+1]作为监视哨,改写教材3.2节中给出的升序直接插入排序算法。顺序表的类型RcdSqList定义如下∶

typedef struct {
KeyType key;

.....

}RcdType;

typedef struct {
RcdType rcd[MAXSIZE+1];// rcd[0]闲置

int length;

}RcdSqList;

实现下列函数∶
void InsertSort(RcdSqList &L);

#include "allinclude.h"  //DO NOT edit this line
void InsertSort(RcdSqList &L)
{ // Add your code here
	int i,j;
    for(i=1;i<L.length;i++)
    {
        if(L.rcd[i+1].key<L.rcd[i].key)
        {
            L.rcd[L.length+1].key=L.rcd[i+1].key;
            j=i+1;
            do{
                j--;
                L.rcd[j+1].key=L.rcd[j].key;
              }
            while(L.rcd[L.length+1].key<L.rcd[j-1].key);
            L.rcd[j].key=L.rcd[L.length+1].key;
        }    
    }    

}

DC03PE06

【题目】如下所述,改写教材1.5节的冒泡排序算法∶将算法中起控制作用的布尔变量change改为一个整型变量,指示每一趟排序中进行交换的最后一个记录的位置,并以它作为下一趟起泡排序循环终止的控制值。顺序表的类型RcdSqList定义如下∶

typedef struct {
KeyType key;

.....

}RCdType;

typedef struct {
RcdType rcd[MAXSIZE+1];// rcd[0] 闲置

int length;

}RcdSqList;

实现下列函数∶
void BubbleSort(RcdSqList &L);
/* 元素比较和交换必须调用以下比较函数和交换函数∶*/

/* Status LT(RedType a,RedType b);比较∶"<"  */

/* Status GT(RedType a,RedType b);比较∶">" */

/* void Swap(RedType &a,RedType &b);交换  */
比较函数和交换函数∶
Status LT(RedType a,RedType b); // 比较函数∶"<"

Status GT (RedType a, RedType b);  //比较函数 :">"
void Swap(RedType &a,RedType &b);  // 交换函数

#include "allinclude.h"  //DO NOT edit this line
void BubbleSort(RcdSqList &L) { 
/* 元素比较和交换必须调用以下比较函数和交换函数:*/
/* Status LT(RedType a, RedType b);   比较:"<"  */
/* Status GT(RedType a, RedType b);   比较:">"  */
/* void Swap(RedType &a, RedType &b); 交换       */
    // Add your code here


int change,i,j;
    int n = L.length;
    change = 0;
    for (i = n ; i > 1; --i)
    {
        if (change)
        {
            i = change;
            change = 0;
        }    
        for (j = 1; j < i  ; j++)
        {
            if (GT(L.rcd[j], L.rcd[j+1]))
            {
                Swap(L.rcd[j],L.rcd[j+1]);
                change = j;                
            }   
        }
        
        if (change == 0)
            break;

    }
}

DC03PE23

【题目】已知记录序列L.rcd[1..L.length]中的关键字各不相同,可按如下所述实现计数排序∶另设数组c[1 ..n],对每个记录a[i],统计序列中关键字比它小的记录个数存于c[i],则c[i]=0的记录必为关键字最小的记录,然后依c[i]值的大小对序列中记录进行重新排列。试编写算法实现上述排序方法。顺序表的类型RcdSqList定义如下∶

typedef struct{
KeyType key;
...
}RcdType;

typedef struct {
RcdType rcd[MAXSIZE+1]; // rcd[0]闲置

int length;
}RcdSqList;

实现下列函数∶
void CountSort(RcdSqList &L);
/* 采用顺序表存储结构,在函数内自行定义计数数组c */

#include "allinclude.h"  //DO NOT edit this line
void CountSort(RcdSqList &L)  // 请自行定义计数数组c,用作排序辅助
{ // Add your code here
 RcdType L0[MAXSIZE + 1];
   
    int c[MAXSIZE + 1] = {0};
    int n = L.length;
    int i,j;
    RcdType temp;
    
    for (i = 1;i <= n;++i)
    {
        for (j = 1;j <= n;++j)
            if (L.rcd[i].key > L.rcd[j].key)
                c[i]++;      
    }

    for (i = 1;i <= n; ++i)
    {
        L0[i] = L.rcd[i];        
    }
    
     for (i = 1;i <= n; ++i)
     {
        L.rcd[c[i]+1] = L0[i];
     }

}
  • 17
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凛_Lin~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值