晨风丶 2016-10-08 13:44 采纳率: 100%
浏览 1272
已采纳

有关C语言数据结构顺序表的问题

代码如下

#include
#include
#define MAX 100

typedef struct
{
char key[15];
char name[20];
int age;
}DATA;

typedef struct
{ DATA list[MAX+1];
int length;
}SeqList;

void SeqListInit(SeqList &L) //初始化顺序表
{
L.length = 0;
}
int SeqListLength(SeqList &L) //返回顺序表长度
{
return L.length;
}
int SeqListAdd(SeqList &L,DATA a) //添加元素
{
if(L.length>=MAX)
{
printf("顺序表已满,无法再添加\n");
return 0;
}
L.list[++L.length] = a;
return 1;
}
int SeqListInsert(SeqList &L,int n,DATA a) //插入元素
{
if(L.length>=MAX)
{
printf("顺序表已满,无法再添加\n");
return 0;
}
if(nL.length+1)
{
printf("插入元素错误,无法添加\n");
return 0;
}
for(int i=L.length;i>=n;i--)
{
L.list[i+1] = L.list[i];
}
L.list[n] = a;
L.length++;
return 1;
}
int SeqListDelete(SeqList &L,int n) //删除元素
{
int i;
if(nL.length)
{
printf("删除结点序号错误,不能删除结点!\n");
return 0;
}
for(i = n;i L.list[i] = L.list[i+1];
L.length--;
return 1;
}
DATA *SeqListFindByNum(SeqList &L,int n) //通过元素位置查找元素
{
if(nL.length)
{
printf("元素序号不正确\n");
return NULL;
}
return &L.list[n];
}
int SeqListFindByCont(SeqList &L,char *c) //通过关键字查找元素
{
for(int i=1;i<=L.length;i++)
{
if(strcmp(L.list[i].key,c)==0)
return i;
}
return 0;
}
int SeqListAll(SeqList &L)
{
for(int i=1;i<=L.length;i++)
printf("(%s,%s,%d)\n",L.list[i].key,L.list[i].name,L.list[i].age);
return 1;
}
int main()
{
int i;
SeqList L;
DATA data,*data1;
char key[15];
SeqListInit(L);
do
{
printf("输入添加的结点(学号,姓名,年龄):");
scanf("%s%s%d",data.key,data.name,&data.age);
if(data.age)
{
if(!SeqListAdd(L,data))
break;
}
else
break;
}while(1);
printf("\n顺序表中的结点顺序为:\n");
SeqListAll(L);

printf("\n要取出的结点的序号:");
scanf("%d",&i);
data1 = SeqListFindByNum(L,i);
if(data1)
    printf("第%d个结点为:(%s,%s,%d)\n",data1->key,data1->name,data1->age);

printf("\n要查找结点的关键字:");
scanf("%s",key);
i = SeqListFindByCont(L,key);
data1 = SeqListFindByNum(L,i);
if(data1)
    printf("第%d个结点为(%s,%s,%d)\n",data1->key,data1->name,data1->age);
return 0;

}

主函数运行到SeqListFindByNum函数程序就莫名奇妙的终止了,求大神看看是什么情况,感谢大家。

  • 写回答

2条回答 默认 最新

  • threenewbee 2016-10-08 14:05
    关注

    if(nL.length)
    应该是
    if(nL.length-1)

    scanf("%s%s%d",data.key,data.name,&data.age);
    ->
    scanf("%s,%s,%d",data.key,data.name,&data.age);
    不然前两个输入不能分开

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?