广工anyview数据结构第3~5章

本文详细探讨了数据结构中的排序算法,包括顺序表的升序直接插入排序、冒泡排序的改进以及计数排序的实现。同时,介绍了哈希表的相关内容,如线性探测开放定址法和链地址法处理冲突的哈希建造算法。此外,还涉及递归算法的应用,如递归求解平方根、递归函数F(n)的计算以及广义表的相关操作。
摘要由CSDN通过智能技术生成

第三章

PE03
/**********
【题目】试以顺序表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)
{
   
    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;
        }    
    }    
}

PE06
/**********
【题目】如下所述,改写教材1.3.2节例1-10的冒泡排序算法:
将算法中用以起控制作用的布尔变量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); 交换             */
{
   
    int i,j,change=1;
    for(i=L.length;i>1&&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;
            } 
    }                
}  

PE23
/**********
【题目】已知记录序列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 */
{
   
    int i,j,count;
    KeyType *rcd2;
    if(L.length!=0){
       
        rcd2=(KeyType *)malloc(L.length * sizeof(KeyType));    
        for(j=0;j<L.length;j++)
            rcd2[j]=0;
        
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值