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

有关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条回答 默认 最新

  • caozhy
    已采纳

    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);
    不然前两个输入不能分开

    点赞 评论
  • caozhy
     if(n<1||n>L.length)
    应该是
    if(n<0||n>L.length-1)
    
    scanf("%s%s%d",data.key,data.name,&data.age);
    ->
    scanf("%s,%s,%d",data.key,data.name,&data.age);
    不然前两个输入不能分开
    
    点赞 评论

相关推荐