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