欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 数据结构实验二 顺序表的应用

数据结构实验二 顺序表的应用

2025/2/14 5:29:20 来源:https://blog.csdn.net/2301_76979886/article/details/142720995  浏览:    关键词:数据结构实验二 顺序表的应用

数据结构实验二 顺序表的应用

一、实验目的

1、掌握建立顺序表的基本方法。
2、掌握顺序表的插入、删除算法的思想和实现,并能灵活运用

二、实验内容

用顺序表实现病历信息的管理与查询功能。具体要求如下:

1.利用教材中定义顺序表类型存储病人病历信息(病历号,姓名,症状);要求使用头文件。

2.设计顺序表定位查找算法,写成一个函数,完成的功能为:在线性表L中查找数据元素x,如果存在则返回线性表中和x值相等的第1个数据元素的序号;如果不存在,则返回-1。

函数定义为 int ListFind(SequenceList L,char *x)

请在主函数中测试查找是否存在姓名为x的病人,并根据返回的序号打印出病人信息。

三、实验源代码

//SequenceList.h
typedef struct
{ElemType list[MaxSize];int size;        
} SequenceList;int ListFind(SequenceList *L,char *c)
{int i;for(i=0;i<L->size;i++) {if(strcmp(L->list[i].name,c)==0){return i;}}return -1;} void ListInitialize(SequenceList *L)
{L->size = 0;
}int ListLength(SequenceList L)
{return L.size;
}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];}L->list[i] = x;L->size++;}return 1;
}int ListDelete(SequenceList *L, int i, ElemType *x)
{int j;if (L->size <= 0){printf("顺序表已空无数据可删!\n");return 0;}else if (i < 0 || i > L->size-1){printf("参数i不合法");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(SequenceList L, int i, ElemType *x)
{if (i < 0 || i > L.size-1){printf("参数i不合法!\n");return 0;}else{*x = L.list[i];return 1;}
}
SequenceList.h
typedef struct
{ElemType list[MaxSize];int size;        
} SequenceList;int ListFind(SequenceList *L,char *c)
{int i;for(i=0;i<L->size;i++) {if(strcmp(L->list[i].name,c)==0){return i;}}return -1;} void ListInitialize(SequenceList *L)
{L->size = 0;
}int ListLength(SequenceList L)
{return L.size;
}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];}L->list[i] = x;L->size++;}return 1;
}int ListDelete(SequenceList *L, int i, ElemType *x)
{int j;if (L->size <= 0){printf("顺序表已空无数据可删!\n");return 0;}else if (i < 0 || i > L->size-1){printf("参数i不合法");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(SequenceList L, int i, ElemType *x)
{if (i < 0 || i > L.size-1){printf("参数i不合法!\n");return 0;}else{*x = L.list[i];return 1;}
}Text2.c
#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"void main()
{patient s,a;SequenceList mylist;int i;ListInitialize(&mylist);;for(i=0;i<N;i++){printf("请输入第%d个病人的信息\n",i+1);printf("请输入第%d个病人的病历号\n",i+1);scanf("%s",s.number);printf("请输入第%d个病人的姓名\n",i+1);scanf("%s",s.name); printf("请输入第%d个病人的年龄\n",i+1);scanf("%d",&s.age);printf("请输入第%d个病人的性别\n",i+1);scanf("%s",s.sex);printf("请输入第%d个病人的症状\n",i+1);scanf("%s",s.symptom); ListInsert(&mylist,i,s);}printf("请输入你要查找的病人姓名:\n"); char x[20];int result;scanf("%s",x);result=ListFind(&mylist,x);  //? if(result>=0){ListGet(mylist,result,&a);printf("%s %s %d %s %s\n",a.number,a.name,a.age,a.sex,a.symptom);}else{printf("输入信息有误。");}
}

四、实验结果
在这里插入图片描述
在这里插入图片描述

五、实验心得
1、可以用typedef来通过一种新的类型名来代替已有的基本数据类型名和已经定义了的类型;
2、可以采用头文件的方式,利用顺序表的基本操作完成程序功能;
3、头文件的包含语句必须写在MaxSize和ElemType定义之后;
4、编译源文件包含了头文件,只编译头文件是会出错的,确定头文件没有错误就可以运行。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com