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


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

相关推荐
yuuki2332334 小时前
【数据结构】用顺序表实现通讯录
c语言·数据结构·后端
还是码字踏实5 小时前
基础数据结构之数组的双指针技巧之对撞指针(两端向中间):三数之和(LeetCode 15 中等题)
数据结构·算法·leetcode·双指针·对撞指针
抠脚学代码9 小时前
Linux开发-->驱动开发-->字符设备驱动框架
linux·数据结构·驱动开发
橘颂TA13 小时前
【剑斩OFFER】算法的暴力美学——串联所有单词的字串
数据结构·算法·c/c++
葵续浅笑14 小时前
LeetCode - 杨辉三角 / 二叉树的最大深度
java·数据结构·算法·leetcode
Miraitowa_cheems14 小时前
LeetCode算法日记 - Day 94: 最长的斐波那契子序列的长度
java·数据结构·算法·leetcode·深度优先·动态规划
Paxon Zhang17 小时前
数据结构之**二叉树**超全秘籍宝典2
java·数据结构·算法
迷途之人不知返18 小时前
链表相关的算法题(2)
数据结构·算法·链表
nju_spy18 小时前
力扣每日一题(四)线段树 + 树状数组 + 差分
数据结构·python·算法·leetcode·面试·线段树·笔试
xie0510_18 小时前
排序算法
数据结构·算法·排序算法