代码如下
#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函数程序就莫名奇妙的终止了,求大神看看是什么情况,感谢大家。