两种操作方式
一、利用点运算符访问
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE]; //存放数组元素
int last; //数组的最后一个元素的下标
}squeuelist;
squeuelist l={0};
int main(void)
{
int choice=0, mount=0, i=0, dat=0, pos=0;
while(1)
{
printf(" 线性顺序表操作练习\n");
printf("1.创建一个顺序表\n");
printf("2.插入数据\n");
printf("3.删除数据\n");
printf("4.打印顺序表\n");
printf("5.退出\n");
printf("请输入你的选择(1-5):");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入你要创建的元素个数:");
scanf("%d", &mount);
if(mount>MAXSIZE)
{
printf("创建的个数大于规定范围!");
break;
}
printf("请输入数据:");
for(i=0; i<mount; i++)
{
scanf("%d",&l.data[i]);
}
l.last = mount-1;
break;
//插入操作
case 2:
printf("请输入要插入的元素值及所在位置(位置1表示元素0,依次类推):");
scanf("%d %d", &dat, &pos);
if(l.last>MAXSIZE-1)
{
printf("空间溢出!\n");
break;
}
else if(pos<1 || pos>l.last+2)
{
printf("插入的位置非法!\n");
break;
}
else
{
for(i=l.last; i>=pos-1;i--)
{
l.data[i+1] = l.data[i];
}
l.data[pos-1] = dat;
l.last += 1;
}
break;
//删除操作
case 3:
printf("请输入你要删除元素所在的位置(位置1代表元素0,依次类推):");
scanf("%d",&pos);
if(pos<1 || pos>l.last+1)
{
printf("输入的位置无效!\n");
break;
}
else
{
for(i=pos; i<=l.last; i++)
{
l.data[i-1] = l.data[i];
}
l.last -= 1;
}
break;
//打印输出顺序表
case 4:
if (mount<=0)
{
printf("No data!\n");
break;
}
printf("顺序表为:");
for(i=0; i<=l.last; i++)
{
printf("%d ", l.data[i]);
}
printf("\n");
printf("顺序表的个数为:%d\n",l.last+1);
break;
//退出程序
case 5:
exit(0);
break;
default:
break;
}
}
return 1;
}
这种访问方式能够成功!
第二种方式利用指针访问
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE]; //存放数组元素
int last; //数组的最后一个元素的下标
}squeuelist;
squeuelist *l=NULL;
int main(void)
{
int choice=0, mount=0, i=0, dat=0, pos=0;
while(1)
{
printf(" 线性顺序表操作练习\n");
printf("1.创建一个顺序表\n");
printf("2.插入数据\n");
printf("3.删除数据\n");
printf("4.打印顺序表\n");
printf("5.退出\n");
printf("请输入你的选择(1-5):");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入你要创建的元素个数:");
scanf("%d", &mount);
if(mount>MAXSIZE)
{
printf("创建的个数大于规定范围!");
break;
}
printf("请输入数据:");
for(i=0; i<mount; i++)
{
scanf("%d",&l->data[i]);
}
l->last = mount-1;
break;
//插入操作
case 2:
printf("请输入要插入的元素值及所在位置(位置1表示元素0,依次类推):");
scanf("%d %d", &dat, &pos);
if(l->last>MAXSIZE-1)
{
printf("空间溢出!\n");
break;
}
else if(pos<1 || pos>l->last+2)
{
printf("插入的位置非法!\n");
break;
}
else
{
for(i=l->last; i>=pos-1;i--)
{
l->data[i+1] = l->data[i];
}
l->data[pos-1] = dat;
l->last += 1;
}
break;
//删除操作
case 3:
printf("请输入你要删除元素所在的位置(位置1代表元素0,依次类推):");
scanf("%d",&pos);
if(pos<1 || pos>l->last+1)
{
printf("输入的位置无效!\n");
break;
}
else
{
for(i=pos; i<=l->last; i++)
{
l->data[i-1] = l->data[i];
}
l->last -= 1;
}
break;
//打印输出顺序表
case 4:
if (mount<=0)
{
printf("顺序表无数据!\n");
break;
}
printf("顺序表为:");
for(i=0; i<=l->last; i++)
{
printf("%d ", l->data[i]);
}
printf("\n");
printf("顺序表的个数为:%d\n",l->last+1);
break;
//退出程序
case 5:
exit(0);
break;
default:
break;
}
}
return 1;
}
当运行创建一个顺序表时,显示出错,报指令引用的“0x00000000”内存,该内存不能被“written”。
求大神帮忙分析下~