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

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)