【数据结构】算法10.3 插入排序-表插入

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

#define MAXINT -1
#define EQ(a,b) ((a) == (b))
#define LT(a,b) ((a) <  (b))
#define LQ(a,b) ((a) <= (b))

typedef int Status;
typedef int ElemType;
typedef int RcdType;
#define SIZE 100
typedef struct
{
    RcdType rc;  //记录项
    int next;  //指针项
}SLNode;
typedef struct
{
    SLNode r[SIZE];  //0号单元为表头结点
    int length;  //链表当前长度
}SLinkListType;  //静态链表类型

/*******************************声明部分****************************************/



/*******************************函数部分****************************************/
Status CreateSLinkList(SLinkListType *SL)
{
    int i;
/*    printf("请输入静态链表长度:");
    scanf("%d",&SL->length);
    for(i = 1;i <= SL->length; i++){
        printf("请输入值:");
        scanf("%d",&SL->r[i].rc);
        SL->r[i].next = i+1;
    }*/
    int arr[8] = {49,38,65,97,76,13,27,49};
    SL->r[0].rc = MAXINT;
    SL->r[0].next = 0;
    SL->length = 8;
    int j = 0;
    for(i = 1;i <= SL->length; i++){
        SL->r[i].rc = arr[j++];
        SL->r[i].next = -1;
    }
 //   SL->r[SL->length].next = 0;
    return OK;
}

Status TraverseSLL(SLinkListType SL)
{
    int i;
    printf("key  : ");
    for(i = 0;i<=SL.length;i++){
        printf("%5d",SL.r[i].rc);
    }
    printf("\n");
    printf("next : ");
    for(i = 0;i<=SL.length;i++){
        printf("%5d",SL.r[i].next);
    }

    printf("\n");
    return OK;
}

int Sort(SLinkListType *SL)
{
    int i,j,k;
    for(i = 1;i<=SL->length;i++){
        for(k=0,j=SL->r[k].next;j && LT(SL->r[j].rc,SL->r[i].rc);
            k=j,j=SL->r[k].next);
        SL->r[i].next = j;
        SL->r[k].next = i;
    }
    return OK;
}

void Arrange(SLinkListType *SL)
{
    int p,i,q;
    SLNode temp;

    p = SL->r[0].next;
    for(i = 1;i <= SL->length;i++){
        while(p < i)
            p = SL->r[p].next;

        q = SL->r[p].next;

        if( p != i){
            temp = SL->r[p];
            SL->r[p] = SL->r[i];
            SL->r[i] = temp;
            SL->r[i].next = p;
        }//if
        p = q;
    }//for
}

/*******************************主函数部分**************************************/

int main()
{
    SLinkListType SL;
    printf("创建静态链表:\n");
    CreateSLinkList(&SL);
    TraverseSLL(SL);

    printf("\n修改指针:\n");
    Sort(&SL);
    TraverseSLL(SL);

    printf("\n表插入排序:\n");
    Arrange(&SL);
    TraverseSLL(SL);

    return 0;
}


这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值