一、实验目的
1、掌握建立顺序表的基本方法。
2、掌握顺序表的插入、删除算法的思想和实现,并能灵活运用
二、实验内容
用顺序表实现病历信息的管理与查询功能。具体要求如下:
1. 利用教材中定义顺序表类型存储病人病历信息(病历号,姓名,症状);要求使用头文件。
2.设计顺序表定位查找算法,写成一个函数,完成的功能为:在线性表L中查找数据元素x,如果存在则返回线性表中和x值相等的第1个数据元素的序号;如果不存在,则返回-1。
函数定义为 int ListFind(SequenceList L,char *x)
请在主函数中测试查找是否存在姓名为x的病人,并根据返回的序号打印出病人信息。
头文件
typedef struct
{
ElemType list[MaxSize];
int size;
}SequenceList;
int ListFind(SequenceList L,const char *x)
{
int i;
for(i=0;i<L.size-1;i++)
{
if(!strcmp(L.list[i].name,x))
return i;
}
return -1;
}
int ListInitialize(SequenceList *L)
{
L->size = 0;
}
int ListGet(SequenceList L,int i,ElemType *x)
{
if( i < 0 || i > L.size-1)
{
printf("查无此人\n");
return 0;
}
if (i == L.size - 1)
return -1;
}
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("不合法");
return 0;
}
else
{
for(j=L->size;j>i;j--)
L->list[j]=L->list[j-1];
L->list[i]=x;
L->size ++;
return 1;
}
}
int ListLength(SequenceList L)
{
return L.size;
}
源代码
#include<stdio.h>
#include<string.h>
#define MaxSize 100
#define N 2
typedef struct
{
char number[5];
char name[20];
int age;
char sex[5];
char symptom[50];
}patient;
typedef patient ElemType;
#include"SequenceList.h"
int main()
{
patient s;
SequenceList mylist;
int i;
ListInitialize(&mylist);
char n[10];
int t;
for(i=0;i<N;i++)
{
printf("输入第%d个病人的信息:\n",i+1);
printf("输入第%d个病人的病历号:",i+1);
scanf("%s",s.number);
printf("输入第%d个病人的姓名:",i+1);
scanf("%s",s.name);
printf("输入第%d个病人的年龄:",i+1);
scanf("%d",&s.age);
printf("输入第%d个病人的性别:",i+1);
scanf("%s",s.sex);
printf("输入第%d个病人的症状:",i+1);
scanf("%s",s.symptom);
ListInsert(&mylist,i,s);
}
printf("输入查找的病人的名字:\n");
scanf("%s",&n);
t=ListFind(mylist,n);
printf("*****************************\n");
ListGet(mylist,t,&s);
if(!t==-1)
printf("%s %s %d %s %s\n",s.number,s.name,s.age,s.sex,s.symptom);
return 0;
}