写线性表出现的问题

问题

今天写一个线性表出现了奇怪的问题,我设置数据的是升序排序,对于小数据成立,对于大数据不行,一时半会找不到原因,记录一下,能发现症状的高手评论区留言一下,感谢感谢😁

代码

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

#define Data_Size 10
typedef int Data_Type;


//创建管理结构体
typedef struct data
{
    Data_Type *Data_Enter;
    int size;
    int last;
}Data,*P_Data;

P_Data init_liearlist()
{
    P_Data ctl=calloc(1,sizeof(Data));

    ctl->Data_Enter=malloc(sizeof(Data_Type)*10);
    ctl->size=Data_Size;
    ctl->last=0;
    return ctl;
}

Data_Type insert_data(P_Data ctl,Data_Type new_data)
{
    //判断是否就可以插入
    if(ctl == NULL || ctl->size == ctl->last)
    {
        printf("无法插入新数据!!!\n");
        return 0;
    }

    //寻找合适的插入位置(这里约定顺序为升序)
    int tmp=0;
    if(!(ctl->last == 0))
    {
    for(int i=0;i<ctl->last;i++)
    {
        //判断是否找到合适位置
        if(new_data<ctl->Data_Enter[i])
        {
            tmp=i;
            for(int j=ctl->last-1;j>=i;j--)
            {
                ctl->Data_Enter[j+1]=ctl->Data_Enter[j];
            }

            break;
        }
    }
    }
    //线性表内没有元素或者无法在原有线性表插入新数据
    ctl->Data_Enter[tmp]=new_data;
    ctl->last++;

    return ctl->last;
}

void display_data(Data *ctl)
{
    if(ctl == NULL || ctl->last == 0)
    {
        printf("无法显示数据!!!\n");
        return;
    }

    //遍历输出
    for(int i=0;i<ctl->last;i++)
    {
        printf("%d\n",ctl->Data_Enter[i]);
    }
    return;
}

int main(int argc,char const* argv[])
{
    //初始化线性表
    P_Data ctl=init_liearlist();

    //输出初始化信息
    printf("Address:%p\t size:%d\t last:%d\n",ctl->Data_Enter,ctl->size,ctl->last);

    //插入数据
    int new_data;
    for(int i=0;i<5;i++)
    {
        printf("请输入要插入的数据:\n");
        scanf("%d",&new_data);

        //截断换行符
        //while(getchar()!='\n');

        //判断是否可以插入
        if(!insert_data(ctl,new_data))
        {
            break;
        }

    }
    
    //显示当前线性表的数据
    display_data(ctl);

    //释放空间
    free(ctl->Data_Enter);
    free(ctl);
    
    return 0;
}

测试结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值