数据结构与算法实验10-查找和排序

、实验目的

掌握运用数据结构两种基本运算查找和排序,并能通过其能解决应用问题。

二、实验软硬件要求

1、VC++ 6.0

三、实验预习

查找排序相关算法

四、实验内容(实验步骤、测试数据等)

为宿舍管理人员编写一个宿舍管理查询软件, 程序采用交互工作方式,其流程如下:
开 始
建立数据文件
数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、快速等任选一种)
查询菜单: (用二分查找实现以下操作)
1.按姓名查询
2.按学号查询
3.按房号查询
打印任一查询结果(可以连续操作)

运行结果:

    实验体会

  (可以记录C语言中薄弱的部分,便于课后复习巩固,每次实验体会需要写两行。)

该章节上课掌握不够牢固,学习和理解的冒泡排序法的基本思想和运用,对其的熟练程度还不高,需要进一步的强化。

 六、源代码或重要代码

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define MAX 100

typedef int KeyType;

typedef char InfoType[32];

typedef struct

{

 KeyType key;

 InfoType name;

 int number;

 int house_number;

}NodeType;

typedef struct

{

 NodeType data[MAX];

 int length;

}SqList;

int pr(SqList R,int mid)

{

 putchar('\n');

 printf("学号\t 姓名  \t 房号 \t \n");

 printf("%d \t %s  \t %d \t",R.data[mid].number,R.data[mid].name,R.data[mid].house_number);

 putchar('\n');

 return 0;

}

void Sort_name(SqList &R)

{

 int i,j;

 NodeType temp;

 for(i=0;i<R.length-1;i++)

  for(j=i+1;j<R.length;j++)

   if(strcmp(R.data[i].name,R.data[j].name)>0)

   {

    temp=R.data[i];

    R.data[i]=R.data[j];

    R.data[j]=temp;

   }

}

void Sort_number(SqList &R)                           

{

 int i,j;

 NodeType temp;

 for(i=0;i<R.length-1;i++)

  for(j=i+1;j<R.length;j++)

   if(R.data[i].number>R.data[j].number)

   {

    temp=R.data[i];

    R.data[i]=R.data[j];

    R.data[j]=temp;

   }

}

 void Sort_house_number(SqList &R)                          

{

 int i,j;

 NodeType temp;

 for(i=0;i<R.length-1;i++)

  for(j=i+1;j<R.length;j++)

   if(R.data[i].house_number>R.data[j].house_number)

   {

    temp=R.data[i];

    R.data[i]=R.data[j];

    R.data[j]=temp;

   }

}

 int BinSearch(SqList &R)

{

 int low,high,mid,t,flag;

 char name_search[32];

 int number_search,house_number_search;;

 do{

 printf("\n查询菜单\n");

 printf("1.按姓名查询 \n");

 printf("2.按学号查询 \n");

 printf("3.按房号查询\n");

 printf("0.退出查询\n");

 scanf("%d",&t);

 flag=0;

 low=0,high=R.length-1;

 switch(t)

 {

 case 1:

  printf("请输入要查询的姓名:");

  scanf("%s",name_search);

  Sort_name(R);

  while(low<=high)

   {

    mid=(low+high)/2;

    if(strcmp(R.data[mid].name,name_search)==0)

     {

      pr(R,mid);

      flag=1;

      break;

    }

    if(strcmp(R.data[mid].name,name_search)>0)

     high=mid-1;

    else low=mid+1;

  }

  if(flag==0)

  printf("\n未找到该信息\n");break;

 case 2:

  printf("请输入要查询的学号:");

 scanf("%d",&number_search);

  Sort_number(R);

  while(low<=high)

   {

    mid=(low+high)/2;

    if(R.data[mid].number==number_search)

     {

      pr(R,mid);

      flag=1;

      break;

    }

    if(R.data[mid].number>number_search)

     high=mid-1;

    else low=mid+1;

  }

  if(flag==0)

  printf("\n未找到该信息\n");break;

 case 3:

  printf("请输入要查询的床号:");

  scanf("%d",&house_number_search);

  Sort_house_number(R);

  while(low<=high)

   {

    mid=(low+high)/2;

    if(R.data[mid].house_number==house_number_search)

     {

      pr(R,mid);

      flag=1;

      low=mid+1;

    }

    if(R.data[mid].house_number>house_number_search)

     high=mid-1;

    else low=mid+1;

  }

  if(flag==0)

  printf("\n未找到该信息\n");break;

 case 0:

  printf("\退出查询\n");break;

 default :

  printf("\n ERROR \n");break;

 }

 }while(t!=0);

 return 0;

}

void create(SqList &R)

{

 int number,house_number;

 char name[32];

 printf("\n添加数据\n");

 printf("学号 \t,姓名 \t,房号 \t \n");

 scanf("%d %s %d",&number,&name,&house_number);

 R.data[R.length].number=number;

 strcpy(R.data[R.length].name,name);

 R.data[R.length].house_number=house_number;

 R.length++;

}

void show(SqList &R)

{

 int i;

 printf("学号 \t姓名 \t房号 \t");

 for(i=0;i<R.length;i++)

 {

  putchar('\n');

  printf("%d \t %s \t %d \t",R.data[i].number,R.data[i].name,R.data[i].house_number);

 }

}

void choose()

{

 printf("\n1.添加数据\n");

 printf("2.展示数据\n");

 printf("3.查找数据\n");

 printf("0.退出\n");

}

void order(SqList &R)

{

 int n;

 choose();

 printf("请问你想选择的功能\n");

 scanf("%d",&n);

 switch(n)

 {

 case 1: create(R);order(R);break;

 case 2: show(R);order(R);break;

 case 3: BinSearch(R);order(R);break;

 case 0: exit(0);break;

 default:order(R);

 }

  order(R);

}

int main()

{

 SqList R;

 R.length=0;

 order(R);

 return 0;

}

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

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

相关文章

Python爬取公众号封面图(零基础也能看懂)

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

c语言:大端小端(真实考试题目)

请简述大端字节序和小端字节序的概念&#xff0c;设计一个程序&#xff08;代码&#xff09;判断当前机器的字节序 大端&#xff08;存储&#xff09;字节序&#xff1a;是指数据的低位保存在内存的高地址中&#xff0c; 数据的高位保存在内存的低地址中。 小端&#xff08;存储…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(十)- 向量整数算术指令

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

文献速递:深度学习胰腺癌诊断--深度学习算法用于从疾病轨迹预测胰腺癌风险

文献速递&#xff1a;深度学习胰腺癌诊断--深度学习算法用于从疾病轨迹预测胰腺癌风险 麦田医学 美好事物中转站 2024-04-02 14:36 Title 题目 A deep learning algorithm to predict risk of pancreatic cancer from disease trajectories 深度学习算法用于从疾病轨迹预测…

Redis 客户端

Redis 客户端 客户端-服务器结构 Redis 同 Mysql 一样&#xff0c;也是一个客户端-服务器结构的程序&#xff0c;结构如下图&#xff1a; 注&#xff1a;Redis 客户端和服务器可以在同一个主机上&#xff0c;也可以在不同主机上 Redis 客户端的多种形态 自带的命令行客户端&…

HTML:表单

案例&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>报名表</title> </head> <body><form action"demo/welcome.php" method"post">名字&#xff1a;<inpu…

【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)

#算法 目录 题目描述思路及实现方式一&#xff1a;递归思路代码实现Java 版本C 语言版本Python3 版本 复杂度分析 方式二&#xff1a;迭代和原地反转思路代码实现Java 版本C 语言版本Python3 版本 复杂度分析 总结相似题目 标签&#xff1a;链表、递归 题目描述 给你链表的头…

金融企业区域集中库的设计构想和测试验证

导读 本文探讨了金融企业区域集中库的设计构想和测试验证&#xff0c;包括架构设想、数据库整合场景测试及优势和使用设想。作者提出利用 TiDB 数据库产品集中建设区域集中库&#xff0c;解决 MySQL 存量节点的整合问题&#xff0c;实现部署的标准化、按需扩展和统一运维管理。…

ArcGIS10.8保姆式安装教程

ArcGIS 10.8是一款非常强大的地理信息系统软件&#xff0c;用于创建、管理、分析和可视化地理数据。以下是ArcGIS 10.8的详细安装教程&#xff1a; 确保系统满足安装要求 在开始安装之前&#xff0c;请确保您的计算机满足以下系统要求&#xff1a; 操作系统&#xff1a;Windo…

【算法集训】基础算法:前缀和 | 习题篇

习题 1480. 一维数组的动态和 简单的前缀和 int* runningSum(int* nums, int numsSize, int* returnSize){int * ret (int *)malloc(sizeof(int) * numsSize);ret[0] nums[0];for(int i 1; i < numsSize; i) {ret[i] ret[i - 1] nums[i];}*returnSize numsSize;ret…

阿里云4核8G服务器ECS通用算力型u1实例优惠价格

阿里云4核8G服务器优惠价格955元一年&#xff0c;配置为ECS通用算力型u1实例&#xff08;ecs.u1-c1m2.xlarge&#xff09;4核8G配置、1M到3M带宽可选、ESSD Entry系统盘20G到40G可选&#xff0c;CPU采用Intel(R) Xeon(R) Platinum处理器&#xff0c;阿里云活动链接 aliyunfuwuq…

逻辑回归详解

逻辑回归详解 逻辑回归&#xff0c;虽然名字中带有“回归”二字&#xff0c;但实际上它是一种分类算法&#xff0c;被广泛用于处理二分类问题。在机器学习和统计学习中&#xff0c;逻辑回归占据了重要的地位&#xff0c;是数据科学家和机器学习工程师的必备工具。本文将详细解…

11 flink-sql 中基于 mysql-cdc 连接 mysql-pxc 集群无法获取增量数据问题

前言 问题是来自于 群友, 2024.03.29, 也是花了一些时间 来排查这个问题 大致的问题是用 mysql-cdc 连接了一个 mysql-pxc 集群, 然后创建了一个 test_user 表 使用 "select * from test_user" 获取数据表的数据, 可以拿到 查询时的快照, 但是 无法获取到后续对…

拾光坞N3 ARM 虚拟主机 i茅台项目

拾光坞N3 在Dcoker部署i茅台案例 OS&#xff1a;Ubuntu 22.04.1 LTS aarch64 cpu&#xff1a;RK3566 ram&#xff1a;2G 部署流程——》mysql——》java8——》redis——》nginx mysql # 依赖 apt update apt install -y net-tools apt install -y libaio* # 下载mysql wg…

CSS设置字体样式

目录 前言&#xff1a; 1.font-family&#xff1a; 2.font-style&#xff1a; 3.font-weight&#xff1a; 4.font-size&#xff1a; 5.font-variant&#xff1a; 6.font&#xff1a; 前言&#xff1a; 在网页中字体是重要的组成部分&#xff0c;使用好字体可以让网页更…

[AIGC] Spring Interceptor 拦截器详解

文章目录 什么是Spring Interceptor如何使用Spring InterceptorSpring Interceptor的影响 什么是Spring Interceptor Interceptor&#xff08;拦截器&#xff09;是Spring MVC框架中的一种特性&#xff0c;类似于Servlet开发中的Filter&#xff08;过滤器&#xff09;&#xf…

一点点安全资料:数通知识扩展

工具 ENSP 华为防火墙 华为防火墙是华为提供的一种网络安全产品&#xff0c;设计用来保护企业网络不受未经授权访问和各种网络威胁的侵害。华为防火墙采用先进的技术&#xff0c;以确保网络安全&#xff0c;同时提供高性能的数据处理能力。下面我们就来详细了解一下华为防火墙…

Spring 面试题(三)

1. Spring Bean 支持哪几种作用域? Spring Bean支持以下五种作用域&#xff1a; Singleton&#xff08;单例&#xff09;&#xff1a;这是Spring默认的作用域。它表示在整个Spring IoC容器中&#xff0c;只会创建一个bean实例。这种作用域适用于那些无状态的bean&#xff0c…

Java常用函数接口

Java常用函数接口 Java 8 中引入的常用函数式接口&#xff0c;也就是 java.util.function 包中的接口。这些接口提供了一种简洁的方式来定义函数&#xff0c;常用于 Lambda 表达式和方法引用。下面是一些常用的接口&#xff1a; 一、Predicate&#xff08;断言&#xff09; …

go实现工厂模式

在Go中实现工厂模式&#xff0c;可以定义一个工厂接口和实现该接口的具体工厂类型。以下是一个简单的例子&#xff1a; package main import "fmt" // 定义一个接口&#xff0c;所有的具体产品都需要实现这个接口 type Product interface { Use() string } …