zoukankan      html  css  js  c++  java
  • 6-2 有序顺序表的插入 (10 分)

    本题要求实现递增顺序表的有序插入函数。L是一个递增的有序顺序表,函数Status ListInsert_SortedSq(SqList &L, ElemType e)用于向顺序表中按递增的顺序插入一个数据。 比如:原数据有:2 5,要插入一个元素3,那么插入后顺序表为2 3 5。 要考虑扩容的问题。

    函数接口定义:

    Status ListInsert_SortedSq(SqList &L, ElemType e);
    

      

    裁判测试程序样例:

    //库函数头文件包含
    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    
    //函数状态码定义
    #define TRUE        1
    #define FALSE       0
    #define OK          1
    #define ERROR       0
    #define INFEASIBLE -1
    #define OVERFLOW   -2
    
    typedef int  Status;
    
    //顺序表的存储结构定义
    #define LIST_INIT_SIZE  100
    #define LISTINCREMENT   10
    typedef int ElemType;  //假设线性表中的元素均为整型
    typedef struct{
        ElemType* elem;   //存储空间基地址
        int length;       //表中元素的个数
        int listsize;     //表容量大小
    }SqList;    //顺序表类型定义
    
    //函数声明
    Status ListInsert_SortedSq(SqList &L, ElemType e);
    
    //顺序表初始化函数
    Status InitList_Sq(SqList &L)
    {
        //开辟一段空间
        L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
        //检测开辟是否成功
        if(!L.elem){
            exit(OVERFLOW);
        }
        //赋值
        L.length = 0;
        L.listsize = LIST_INIT_SIZE;
    
        return OK;
    }
    
    //顺序表输出函数
    void ListPrint_Sq(SqList L)
    {
        ElemType *p = L.elem;//遍历元素用的指针
    
    	
        for(int i = 0; i < L.length; ++i){
            if(i == L.length - 1){
                printf("%d", *(p+i));
            }
            else{
                printf("%d ", *(p+i));
            }
        }
    }
    int main()
    {
        //声明一个顺序表
        SqList L;
        //初始化顺序表
        InitList_Sq(L);
    
        int number = 0;
        ElemType e;
    
         scanf("%d", &number);//插入数据的个数 
    
        for(int i = 0; i < number; ++i)
        {
    	scanf("%d", &e);//输入数据
            ListInsert_SortedSq(L, e);
        }
    
        ListPrint_Sq(L);
    
        return  0;
    }
    
    
    /* 请在这里填写答案 */
    

      

    输入格式: 第一行输入接下来要插入的数字的个数 第二行输入数字 输出格式: 输出插入之后的数字

    输入样例:

    5
    2 3 9 8 4
    

      

    输出样例:

    2 3 4 8 9
    

      

     

    Status ListInsert_SortedSq(SqList &L, ElemType e)
    {
        if(L.length >= L.listsize){
            L.elem = (ElemType*)realloc(L.elem, sizeof(ElemType)*(L.listsize+LISTINCREMENT));
            L.listsize += LISTINCREMENT;
            if(!L.elem)
                exit(OVERFLOW);
        }
        ElemType *p = L.elem + L.length - 1;
    
        while(*p >= e && p >= L.elem){
            *(p+1) = *p;
            --p;
        }
        *(p+1) = e;
        ++L.length;
        return OK;
    }
    

      

    Status ListInsert_SortedSq(SqList &L, ElemType e)
    {
        if(L.length >= L.listsize){
            L.elem = (ElemType*)realloc(L.elem,sizeof(L.listsize+LISTINCREMENT));
            L.listsize += LISTINCREMENT;
            if(!L.elem)
                exit(OVERFLOW);
        }
        int i;
        for(i=L.length; i>0; i--){
            if(L.elem[i-1] > e)
                L.elem[i] = L.elem[i-1];
            else
                break;
        }
        L.elem[i] = e;
        L.length++;
    }
    

      

  • 相关阅读:
    AUSU 安装Win10注意事项
    华硕笔记本无法设置U盘启动,快捷启动不能识别
    postgres 得到所有表空间 和 表空间的位置
    python 远程链接、搜索与下载
    python 读取 postgreSQL 数据保存CSV文件
    weka 初练之 文本分类
    基于springMVC+mybatis的实践记录
    简单的springMVC + mybatis 编写程序流程
    sql查询 生成列号
    通过资源文件 验证拦截机制
  • 原文地址:https://www.cnblogs.com/Jie-Fei/p/9648790.html
Copyright © 2011-2022 走看看