GDPU 数据结构 天码行空2

实验内容

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

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

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

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

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


注意 头文件的名称 和 主程序导入的头文件名称 需要一致,并且两文件放在同一目录下。

🍻 头文件 head.h

头文件写 patient 结构体 和 SequenceList 顺序表结构体 和 各种方法

cpp 复制代码
#include <stdio.h>
#include <string.h>
#define MaxSize 10000

typedef struct  {
	int id;//病历号
	char* name;//病人名称
	char* symptoms;//症状
}patient;

typedef struct 
{
	patient list[MaxSize];
	int size;
}SequenceList;
//初始化一个顺序表,长度为 0
void ListInitialize(SequenceList *L)
{
	L->size = 0;
}

//返回顺序表中的元素个数
int ListLength(SequenceList L)
{
	return L.size;
}

// 在顺序表 L 的位置 i 前插入 x 值
int ListInsert(SequenceList *L,int i,patient p)
{
	int j = 0;
	if(L -> size >= MaxSize)
	{
		printf("顺序表已满 \n");	 
		return 0;
	}
	if(i < 0 || i > L->size)
	{
		printf("参数i不合法 \n");
		return 0;
	}
	for(j = L -> size; j > i; j--)
		L -> list[j] = L -> list[j-1];
	L -> list[i] = p;
	L -> size++;
	return 1; 
	
} 

// 在顺序表 L 中查找姓名为 x 的下标
int ListFind(SequenceList L,char *name)
{
	int size = ListLength(L);
	for(int i = 0; i < size; i++)
	{
//		strcmp(s1,s2) 当s1 == s2 返回 0
		if(!strcmp(name,L.list[i].name))
			return i;
	}	
	return -1;//不存在则返回-1 
}

//打印顺序表所有内容
void ListPrint(SequenceList L)
{
	for(int i = 0; i < ListLength(L); i++)
	{
		printf("%d %s %s\n",L.list[i].id,L.list[i].name,L.list[i].symptoms);
	}
}

//打印出指定序号的病人信息
void PrintById(SequenceList L,int idx)
{
	printf("id: %d, 姓名:%s, 症状:%s\n",
		L.list[idx].id,
		L.list[idx].name,
		L.list[idx].symptoms);
}

🍻 hello.c

主文件调用写好的结构体和方法

cpp 复制代码
#include "head.h" //导入自定义的头文件 head.h

int main()
{
	SequenceList L;
	ListInitialize(&L);
	//以下为测试数据 可以换成输入的形式
	patient p1 = {1,"张三","症状1"};
	patient p2 = {2,"李四","症状2"};
	patient p3 = {3,"王五","症状3"}; 
	ListInsert(&L,0,p1); 
	ListInsert(&L,0,p2);
	ListInsert(&L,0,p3);

//	printf("===病历表===\n");
//	ListPrint(L);

	char name[100];
	printf("请输入要查找的姓名:");
	scanf("%s",name);
	int res = ListFind(L,name);//res 为病人 x 在顺序表中的下标,x = -1说明不存在
	if(res == -1)
		printf("查无此人");
	else
		PrintById(L,res);
	
	return 0;
}

样例1


样例2


😋 有空的可以写一下输入数据

相关推荐
量子炒饭大师20 分钟前
Cyber骇客神经塔尖协议 ——【初阶数据结构与算法】堆
c语言·数据结构·c++·二叉树·github·
XLYcmy1 小时前
TarGuessIRefined密码生成器详细分析
开发语言·数据结构·python·网络安全·数据安全·源代码·口令安全
KingRumn1 小时前
DBUS源码剖析之DBusMessage数据结构
linux·服务器·数据结构
youngee112 小时前
hot100-61电话号码的字母组合
java·数据结构·leetcode
jackyrongvip2 小时前
10个动画介绍递归(用Gemin3生成)
数据结构·递归·gemin3
一条大祥脚3 小时前
26.1.1
数据结构·算法
chushiyunen5 小时前
快慢双指针算法笔记
数据结构·笔记·算法
@小码农5 小时前
202512 电子学会 Scratch图形化编程等级考试三级真题(附答案)
服务器·开发语言·数据结构·数据库·算法
报错小能手7 小时前
数据结构 字典树
开发语言·数据结构
XLYcmy7 小时前
高级密码生成器程序详解:专门设计用于生成基于用户个人信息的密码猜测组合
开发语言·数据结构·python·网络安全·数据安全·源代码·口令安全