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

news2024/11/30 14:45:40

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

一、实验目的

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、编译源文件包含了头文件,只编译头文件是会出错的,确定头文件没有错误就可以运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2191598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直立行走机器人技术概述

直立行走机器人技术作为现代机器人领域的重要分支&#xff0c;结合了机械工程、计算机科学、人工智能、传感技术和动态控制等领域的最新研究成果。随着技术的不断发展&#xff0c;直立行走机器人在救灾、医疗、家庭辅助等领域开始发挥重要作用。本文旨在对直立行走机器人的相关…

Java 注释新手教程一口气讲完!ヾ(≧▽≦*)o

Java 注释 Java面向对象设计 - Java注释 什么是注释&#xff1f; Java中的注释允许我们将元数据与程序元素相关联。 程序元素可以是包&#xff0c;类&#xff0c;接口&#xff0c;类的字段&#xff0c;局部变量&#xff0c;方法&#xff0c;方法的参数&#xff0c;枚举&…

【STM32开发之寄存器版】(五)-窗口看门狗WWDG

一、前言 窗口看门狗简介&#xff1a; 窗口看门狗通常被用来监测&#xff0c;由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新&#xff0c;看门狗电路在达到预置的时间周期时&#xff0c;会产生一个M…

C语言 | Leetcode C语言题解之第459题重复的子字符串

题目&#xff1a; 题解&#xff1a; bool kmp(char* query, char* pattern) {int n strlen(query);int m strlen(pattern);int fail[m];memset(fail, -1, sizeof(fail));for (int i 1; i < m; i) {int j fail[i - 1];while (j ! -1 && pattern[j 1] ! pattern…

Pikachu-PHP反序列化

从后端代码可以看出&#xff0c;拿到序列化后的字符串&#xff0c;直接做反序列化&#xff1b;并且在前端做了展示&#xff1b; 如果虚拟化后的字符串&#xff0c;包含alert 内容&#xff0c;反序列化后&#xff0c;就会弹出窗口 O:1:"S":1:{s:4:"test";s…

佑航科技Pre-A+轮融资成功:加速车载超声波芯片研发与量产

近日,超声波芯片领域的领先企业珠海佑航科技有限公司(简称“佑航科技”)宣布成功完成数千万元的Pre-A+轮战略融资。本轮融资由上市公司思瑞浦微电子旗下的芯阳基金进行战略投资,标志着佑航科技在车载超声波芯片及传感器领域的研发与量产能力迈上了新台阶。此次融资不仅为佑…

《Linux从小白到高手》理论篇:深入理解Linux的网络管理

今天继续宅家&#xff0c;闲来无事接着写。本篇详细深入介绍Linux的网络管理。 如你所知&#xff0c;在Linux中一切皆文件。网卡在 Linux 操作系统中用 ethX,是由 0 开始的正整数&#xff0c;比如 eth0、eth1… ethX。而普通猫和ADSL 的接口是 pppX&#xff0c;比如 ppp0 等。 …

Golang | Leetcode Golang题解之第459题重复的子字符串

题目&#xff1a; 题解&#xff1a; func repeatedSubstringPattern(s string) bool {return kmp(s s, s) }func kmp(query, pattern string) bool {n, m : len(query), len(pattern)fail : make([]int, m)for i : 0; i < m; i {fail[i] -1}for i : 1; i < m; i {j : …

【Python游戏开发】贪吃蛇游戏demo

准备步骤 项目开发使用【Mu 编辑器】 1.新建项目&#xff0c;并导入游戏图片 游戏编写 1.创建场景 SIZE 15 # 每个格子的大小 WIDTH SIZE * 30 # 游戏场景总宽度 HEIGHT SIZE * 30 # 游戏场景总高度def draw():screen…

Spring源码-依赖注入

核心方法是&#xff1a;populateBean 整体流程&#xff1a;首先进行Spring自带的依赖注入&#xff0c;包括byName和byType&#xff0c;然后进行注解Autowired的注入 1.Spring自带依赖注入byName和byType 核心代码&#xff1a; int resolvedAutowireMode mbd.getResolvedAu…

C++ | Leetcode C++题解之第459题重复的子字符串

题目&#xff1a; 题解&#xff1a; class Solution { public:bool kmp(const string& query, const string& pattern) {int n query.size();int m pattern.size();vector<int> fail(m, -1);for (int i 1; i < m; i) {int j fail[i - 1];while (j ! -1 &…

【星汇极客】手把手教学STM32 HAL库+FreeRTOS之任务管理(2)

前言 本人是一名嵌入式学习者&#xff0c;在大学期间也参加了不少的竞赛并获奖&#xff0c;包括但不限于&#xff1a;江苏省电子设计竞赛省一、睿抗机器人国二、中国高校智能机器人国二、嵌入式设计竞赛国三、光电设计竞赛国三、节能减排竞赛国三。 后面会经常写一下博客&…

Spring Boot与iTextPdf:高效生成PDF文件预览

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 在现代应用程序开发中&#xff0c;生成PDF文件是一个常见的需求。PDF文件因其跨平台性和易读性&#xff0c;被广泛应用于文档交换、报告生成和打印预览等场景。Spring Boot作为一个用于简化Spring应用开发的框…

华为OD机试 - 几何平均值最大子数(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

uniapp固定document.title标题

由于业务中需要将h5的标题固定 但是uniapp没有对应的接口 所以使用Object.defineProperty拦截set方法来实现 代码也很简单 在App.vue的onLaunch加上就行了 onLaunch: function() {document.title 固定标题;Object.defineProperty(document, title, {set() {return false;}});…

USB 3.0?USB 3.1?USB 3.2?怎么区分?

还记得小白刚接触电脑的时候&#xff0c;电脑普及的USB接口大部分是USB 2.0&#xff0c;还有少部分USB 1.0的&#xff08;现在基本上找不到了&#xff09;。 当时的电脑显示器&#xff0c;可能00后的小伙伴都没见过&#xff0c;它们大概长这样&#xff1a; 当时小白以为电脑最…

C++ 算法学习——1.6 差分算法与二维差分算法

一维差分算法概述&#xff1a; 差分算法是一种用于计算序列中相邻元素之间差值的技术。在C中&#xff0c;STL&#xff08;标准模板库&#xff09;提供了std::adjacent_difference函数来实现差分算法。 std::adjacent_difference函数&#xff1a; std::adjacent_difference函数位…

基于MindSpore实现CycleGAN壁画修复

基于MindSpore实现CycleGAN壁画修复_哔哩哔哩_bilibili 本案例运行需要较大内存&#xff0c;建议在Ascend/GPU上运行。 模型介绍 模型简介 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络&#xff0c;来自论文 Unpaired Image-to-Image Translation us…

指针赋值or常数赋值

int main (){int a 10;int b ;b a;int *c &a;int *d c; } 常数 a,b赋值&#xff1a; 都是将存储的值&#xff08;10&#xff09;赋值给别人。 指针赋值也是类似的&#xff1a; 指针存储的值&#xff08;&a&#xff09;为地址&#xff0c;就是把c指向的地址赋值给…

C语言 | Leetcode C语言题解之第458题可怜的小猪

题目&#xff1a; 题解&#xff1a; int poorPigs(int buckets, int minutesToDie, int minutesToTest){int base minutesToTest / minutesToDie 1;int pigs ceil(log(buckets)/log(base));return pigs; }