该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
//VS2010 环境
/*
当我选择操作1之后,
立即选择操作2,然后输入三个数据1,2,3
问题出现了:得到数据为测试1:-858993457(L->length)
为什么?
之后就是选择操作3,答案总是指定位置不存在!
*/
#include
#include
#include
#define MAXSIZE 100
typedef int DataType;
void Init_Sq_list(Sq_list);
void InPut(Sq_list);
void Insert_Sq_list(Sq_list );
typedef struct LNode
{
DataType data[MAXSIZE];
int length;
}Sq_list;
void main()
{
Sq_list SL;
int Opration,Flag=1;
while(Flag==1)
{
printf("请输入你想要的操作:\n1.创建顺序表;\n2.输入数据;\n3.插入运算;\n4. 删除运算;\n5.查找运算;\n6.退出!\n\n");
scanf("%d",&Opration);
switch(Opration)
{
case 1:
printf("创建顺序表:\n");
Init_Sq_list(&SL);
break;
case 2:
InPut(&SL);
break;
case 3:
printf("插入运算:\n");
Insert_Sq_list(&SL);
break;
case 6:
Flag=0;
break;
default:
break;
}
}
}
void Init_Sq_list(Sq_list *L) //地址传值的方式
{
L=(Sq_list *)malloc(sizeof(Sq_list));
L->length=0;
}
void InPut(Sq_list *L)
{
int i,e;
printf("请输入你要输入数据的个数:\n");
scanf("%d",&e);
printf("输入你想要输入的数据:\n");
for(i=1;i<=e;i++)
{
scanf("%d",&L->data[i]);
L->length=L->length+1;
}
printf("测试1:%d",L->length);
//当插入三个数据“1,2,3”之后,得到测试1:-858993457
}
void Insert_Sq_list(Sq_list *L)
{
int j,i;
DataType x;
printf("测试2:%d",L->length);
printf("请输入相应的位置:\n");
scanf("%d",&i);
printf("请输入相应的数据:\n");
scanf("%d",&x);
if(L->length==MAXSIZE)
{
printf("顺序表已满!无法插入!\n");
exit(1);
}
if(i<0||i>L->length)//
{
printf("指定位置不存在!\n");
exit(1);
}
for(j=L->length-1;j>=i-1;j--)
{
L->data[j+1]=L->data[j];
}
L->data[i-1]=x;
L->length++;
}