• GDPU 数据结构 天码行空2


    实验内容

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

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

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

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

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


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

    🍻 头文件 head.h

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

    #include 
    #include 
    #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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79

    🍻 hello.c

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

    #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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    样例1

    在这里插入图片描述


    样例2

    在这里插入图片描述


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

  • 相关阅读:
    先进的无人机GPS/GNSS模块解决方案
    搭建ASGI高性能web服务器FastAPI,python
    编译原理笔记01
    CTF-反序列化
    【leetcode】【2022/8/15】641. 设计循环双端队列
    survival | 生存分析(5):加速失效时间模型(Accelerated Failure Time Model)
    【linux系统】如何在服务器上安装Anaconda
    基于龙蜥操作系统指令加速,降低云原生网关的构建成本
    WAF Bypass及案例实战
    一次 MySQL 误操作导致P0级事故
  • 原文地址:https://blog.csdn.net/lt6666678/article/details/132902110