题目:
头文件代码:
```c
//5个函数???
typedef struct{
ElemType list[MaxSize];
int size;
}SequenceList; //将struct 某某类型,自定义成 SequenceList
SequenceList L; //SequenceList的变量名
/*顺序表的初始化*/
void ListInitialize(SequenceList *L) //一定要用指针参数,其会自动传回到主函数
{
L->size=0;
}
int ListLength(SequenceList L)
{
return L.size;
}
/*在顺序表L的位置i前插入数据元素x,插入成功则返回1,失败则返回0*/
int ListInsert(SequenceList *L,int i,ElemType x)
{
int j;
if(L->size>=MaxSize)
{
printf("顺序表已满无法插入!\n");
return 0;
}
else if(i<0||i>L->size)
{
printf("参数i不合法:\n");
return 0;
}
else
{
/*for(j=L->size;j>i;j--) //从最后开始往前后退
{
L->list[j]=L->list[j-1]; //其实,读到后面我们就能知道为什么要用指针了,这样方便传递,不用再用return了但是,这个不是在前面吗,我在想想
} */ //????
L->list[i]=x;
L->size++;//这个加加,和前面不能换位置
return 1;
}
}
int ListGet(SequenceList L,int i,ElemType *x) //注意:只是取值,不用动顺序表里面的东西,否则就像删除数据了
{
if(i<0||i>ListLength(L)-1) //为什么不能用i>L.size-1
{
printf("参数i不合法:\n");
return 0;
}
else
{
*x=L.list[i];
return 1;
}
}
int ListFind(SequenceList L,char x)
{
int i;
for(i=0;i<L.size;i++)
{
if(L.list[i].name==x)
{
return i;
break; //找到了就不要继续找下去,如果继续找下去是返回i还是-1 ???
}
else
return -1;
}
}
主函数代码:
//这是一个利用顺序表来实现的病人病历管理系统
#include<stdio.h>
#include<string.h>
#define MaxSize 101 //这个是宏定义
typedef struct
{
char number[5];
char name[20];
char symptom[50];
} patient;
typedef patient ElemType; //struct patient结构里面所有的变量类型定义为ElemType类型
#include"SequenceList.h" //如果这里空格会怎样 ???
int main()
{
int n;
patient s; //定义 结构体变量,难道不能用ElemType s;??? 所以这里是不可以的
SequenceList mylist; //对应了那些函数的参数类型都是SequenceList
int i,j;
ListInitialize(&mylist); //再看看函数传递???
printf("病人数量:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个病人的信息:\n",i+1);
scanf("%s%s%s",s.number,s.name,s.symptom);
ListInsert( &mylist,i, s); //s里的所有东西插入到顺序表中
}
printf("请输入需要查找病人的名字:\n");
scanf("%s",s.name) ;
j=ListFind(L,s.name);//存在的话返回的是和x相等的数据元素的序号
printf("查找的病人在顺序表是第几个:%d\n",j);
ListGet(L,j,&s);
printf("%s %s %s ",s.number,s.name,s.symptom);
return 0;
}
测试结果:
奇怪的点:
1.返回的j值总是0,不是和代码那样,返回的是对应的哪个数
2.提取信息那里,不管j是否在范围内,总是会先打印“参数不合法”
3.取出来的信息只有名字是对的,无论是何种情况取出来的信息中,序号和症状总是顺序表最后一个信息里的序号和症状。
希望指出代码问题,非常感谢!