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++;
    }
    

      

  • 相关阅读:
    sqlserver中判断表或临时表是否存在
    Delphi 简单方法搜索定位TreeView项
    hdu 2010 水仙花数
    hdu 1061 Rightmost Digit
    hdu 2041 超级楼梯
    hdu 2012 素数判定
    hdu 1425 sort
    hdu 1071 The area
    hdu 1005 Number Sequence
    hdu 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/Jie-Fei/p/9648790.html
Copyright © 2011-2022 走看看