7.7作业

news2025/1/4 19:08:15

搭建一个场景:
将学生的信息,以顺序表的方式存储(堆区),并且实现封装函数 :
1】顺序表的创建
2】判满
3】判空
4】往顺序表里增加学生
5】遍历
6】任意位置插入学生
7】任意位置删除学生
8】修改
9】查找(按学生的学号查找)
10】去重
11】销毁顺序表

stu.h

#ifndef __STU_H__
#define __STU_H__

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 30

typedef struct student
{
	char name[MAX][20];
	int id[MAX];
	int len;
}stu,*stu_p;

//创建顺序表
stu_p stu_create();
//判满
int fill(stu_p S);
//判空
int empty(stu_p S);
//增加学生
void push_back(stu_p S,char *a,int b);
//输出顺序表
void show(stu_p S);
//按位置插入
void insert_idex(stu_p S,int idex,char *a,int b);
//按位置删除
void del_idex(stu_p S,int idex);
//按位置修改
void change_idex(stu_p S,int idex,char *a,int b);
//按学号查找
int find_value(stu_p S,int b);
//去重
void repeat(stu_p S);
//销毁顺序表
void free_stu(stu_p *S);

#endif

stu.c

#include"stu.h"


//创建顺序表
stu_p stu_create()
{
	stu_p S=(stu_p)malloc(sizeof(stu));
	if(NULL==S)
	{
		printf("创建失败\n");
		return NULL;
	}
	S->len=0;
	memset(S->name,0,sizeof(S->name));
	memset(S->id,0,sizeof(S->id));
	printf("创建成功\n");
	return S;
}
//判满
int fill(stu_p S)
{
	if(NULL==S)
	{
		printf("判满失败\n");
		return -1;
	}
	return S->len==MAX;
}
//判空
int empty(stu_p S)
{
	if(NULL==S)
	{
		printf("判空失败\n");
		return -1;
	}
	return S->len==0;
}
//增加学生
void push_back(stu_p S,char *a,int b)
{
	if(NULL==S||fill(S))
	{
		printf("增加失败\n");
		return;
	}
	strcpy(S->name[S->len],a);
	S->id[S->len]=b;
	S->len++;
}
//输出顺序表
void show(stu_p S)
{
	if(NULL==S||empty(S))
	{
		printf("输出失败\n");
		return;
	}
	printf("姓名\t学号\n");
	for(int i=0;i<S->len;i++)
		printf("%s\t%d\n",S->name[i],S->id[i]);
	printf("\n");
}
//按位置插入
void insert_idex(stu_p S,int idex,char *a,int b)
{
	if(NULL==S||fill(S)||idex<=0||idex>MAX)
	{
		printf("插入失败\n");
		return;
	}
	idex-=1;
	for(int i=0;i<S->len-idex;i++)
	{
		strcpy(S->name[S->len-i],S->name[S->len-i-1]);
		S->id[S->len-i]=S->id[S->len-i-1];
	}
	strcpy(S->name[idex],a);
	S->id[idex]=b;
	S->len++;
}
//按位置删除
void del_idex(stu_p S,int idex)
{
	if(NULL==S||empty(S)||idex<=0||idex>MAX)
	{
		printf("删除失败\n");
		return;
	}
	idex-=1;
	for(int i=idex;i<S->len;i++)
	{
		strcpy(S->name[i],S->name[i+1]);
		S->id[i]=S->id[i+1];
	}
	S->len--;
}
//按位置修改
void change_idex(stu_p S,int idex,char *a,int b)
{
	if(NULL==S||empty(S)||idex<=0||idex>MAX)
	{
		printf("修改失败\n");
		return;
	}
	strcpy(S->name[idex-1],a);
	S->id[idex-1]=b;
}
//按学号查找
int find_value(stu_p S,int b)
{
	if(NULL==S||empty(S))
	{
		printf("查找失败\n");
		return -1;
	}
	int flag=0;
	for(int i=0;i<S->len;i++)
	{
		if(S->id[i]==b)
		{
			flag=1;
			return i;
		}
	}
	if(flag==0)
		printf("查无此人\n");
}
//去重
void repeat(stu_p S)
{
	if(NULL==S||empty(S))
	{
		printf("去重失败\n");
		return;
	}
	for(int i=0;i<S->len;i++)
	{
		for(int j=i+1;j<S->len;j++)
		{
			if(S->id[i]==S->id[j])
			{
				del_idex(S,j+1);
				j--;
			}
		}
	}
}
//销毁顺序表
void free_stu(stu_p *S)
{
	if(NULL==*S)
	{
		printf("销毁失败\n");
		return;
	}
	free(*S);
	*S=NULL;
}

main.c

#include"stu.h"

int main()
{
	//创建顺序表
	stu_p S=stu_create();
	//增加学生
	push_back(S,"张三",101);
	push_back(S,"李四",321);
	push_back(S,"王五",101);
	//输出顺序表
	show(S);
	//按位置插入
	insert_idex(S,2,"老王",827);
	insert_idex(S,4,"老李",625);
	show(S);
	//按位置删除
	del_idex(S,3);
	show(S);
	//按位置修改
	change_idex(S,2,"老赵",666);
	show(S);
	//按学号查找
	find_value(S,111);
	//去重
	repeat(S);
	show(S);
	//销毁顺序表
	free_stu(&S);
}

 

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

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

相关文章

刷题之删除有序数组中的重复项(leetcode)

删除有序数组中的重复项 这题简单题&#xff0c;双指针&#xff0c;一个指针记录未重复的数的个数&#xff0c;另一个记录遍历的位置。 以下是简单模拟&#xff0c;可以优化&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {int l0…

PyTorch中的多进程并行处理

PyTorch是一个流行的深度学习框架&#xff0c;一般情况下使用单个GPU进行计算时是十分方便的。但是当涉及到处理大规模数据和并行处理时&#xff0c;需要利用多个GPU。这时PyTorch就显得不那么方便&#xff0c;所以这篇文章我们将介绍如何利用torch.multiprocessing模块&#x…

含并行连结的网络

一、Inception块 1、白色部分通过降低通道数来控制模型复杂度&#xff0c;蓝色做特征提取工作&#xff0c;每条路上的通道数可能不同&#xff0c;大概我们会把更重要的那部分特征分配更多的通道数 2、Inception只改变高宽&#xff0c;不改变通道数 3、在不同的情况下需要选择…

渐开线花键测量学习笔记分享

大家好&#xff0c;继续渐开线花键的相关内容&#xff0c;本期是渐开线花键测量相关的学习笔记分享&#xff1a; 花键检测项目有花键大径和小径检验&#xff1b;内花键齿槽宽和外花键齿厚&#xff0c;以及渐开线终止圆 和起始圆直径检测&#xff1b;齿距累计误差 、齿形误差 、…

MySQL—统计函数和数学函数以及GROUP BY配合HAVING

合计/统计函数 count -- 演示 mysql 的统计函数的使用 -- 统计一个班级共有多少学生&#xff1f; SELECT COUNT(*) FROM student -- 统计数学成绩大于 90 的学生有多少个&#xff1f; SELECT COUNT(*) FROM student WHERE math > 90 -- 统计总分大于 250 的人数有多少&…

Centos新手问题——yum无法下载软件

起因&#xff1a; 最近在学习centos7&#xff0c;在VM上成功安装后&#xff0c;用Secure进行远程登陆。然后准备下载一个C编译器&#xff0c;看网络上的教程&#xff0c;都是用yum来下载&#xff0c;于是我也输入了命令&#xff1a; yum -y install gcc* 本以为会自动下载&a…

数据统计与数据分组18-25题(30 天 Pandas 挑战)

数据统计与数据分组 1. 知识点1.18 分箱与统计个数1.19 分组与求和统计1.20 分组获取最小值1.21 分组获取值个数1.22 分组与条件查询1.23 分组与条件查询及获取最大值1.24 分组及自定义函数1.25 分组lambda函数统计 2. 题目2.18 按分类统计薪水&#xff08;数据统计&#xff09…

《python程序语言设计》2018版第5章第52题利用turtle绘制sin函数

这道题是送分题。因为循环方式已经写到很清楚&#xff0c;大家照抄就可以了。 但是如果说光照抄可是会有问题。比如我们来演示一下。 import turtleturtle.penup() turtle.goto(-175, 50 * math.sin((-175 / 100 * 2 * math.pi))) turtle.pendown() for x in range(-175, 176…

5款屏幕监控软件精选|电脑屏幕监控软件分享

屏幕监控软件在现代工作环境中扮演着越来越重要的角色&#xff0c;无论是为了提高员工的工作效率&#xff0c;还是为了保障企业数据的安全&#xff0c;它们都成为了不可或缺的工具。 下面&#xff0c;让我们以一种新颖且易于理解的方式&#xff0c;来介绍五款备受好评的屏幕监…

前端JS特效第21集:HTML5响应式多种切换效果轮播大图切换js特效代码

HTML5响应式多种切换效果轮播大图切换js特效代码&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t…

灵活视图变换器:为扩散模型设计的革新图像生成架构

在自然界中&#xff0c;图像的分辨率是无限的&#xff0c;而现有的图像生成模型在跨任意分辨率泛化方面存在困难。虽然扩散变换器&#xff08;DiT&#xff09;在特定分辨率范围内表现出色&#xff0c;但在处理不同分辨率的图像时却力不从心。为了克服这一限制&#xff0c;来自上…

MySQL篇三:数据类型

文章目录 前言1. 数值类型1.1 tinyint类型1.2 bit类型1.3 小数类型1.3.1 float1.3.2 decimal 2. 字符串类型2.1 char2.2 varchar2.3 char和varchar比较 3. 日期类型4. enum和set 前言 数据类型分类&#xff1a; 1. 数值类型 1.1 tinyint类型 在MySQL中&#xff0c;整型可以指…

MPS---MPQ86960芯片layout设计总结

MPQ86960 是一款内置功率 MOSFET 和栅极驱动的单片半桥。它可以在宽输入电压 (VIN) 范围内实现高达 50A 的连续输出电流 (IOUT)&#xff0c;通过集成MOSFET 和驱动可优化死区时间 (DT) 并降低寄生电感&#xff0c;从而实现高效率。 MPQ86960 兼容三态输出控制器&#xff0c;另…

[附源码]基于Flask的演唱会购票系统

摘要 随着互联网技术的普及和发展&#xff0c;传统购票方式因其效率低下、流程繁琐等问题已难以满足现代社会的需求。本文设计并实现了一个基于Flask框架的演唱会购票系统&#xff0c;该系统集成了用户管理、演唱会信息管理、票务管理以及数据统计与分析等功能模块&#xff0c…

如何让代码兼容 Python 2 和 Python 3?Future 库助你一臂之力

目录 01Future 是什么? 为什么选择 Future? 安装与配置 02Future 的基本用法 1、兼容 print 函数 2、兼容整数除法 3、兼容 Unicode 字符串 03Future 的高级功能 1. 处理字符串与字节 2. 统一异常处理…

nullptr和NULL

nullptr 既不是整型类型&#xff0c;也不是指针类型&#xff0c;nullptr 的类型是 std::nullptr_t&#xff08;空指针类型&#xff09;&#xff0c;能转换成任意的指针类型。 NULL是被定义为0的常量&#xff0c;当遇到函数重载时&#xff0c;就会出现问题。避免歧义 函数重载…

Django QuerySet对象,filter()方法

filter()方法 用于实现数据过滤功能&#xff0c;相当于sql语句中的where子句。 filter(字段名__exact10) 或 filter(字段名10)类似sql 中的 10 filter(字段名__gt10) 类似SQL中的 >10 filter(price__lt29.99) 类似sql中的 <29.99 filter(字段名__gte10, 字段名__lte20…

ELFK简介

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

初识java—jdk17的一些新增特性

文章目录 前言一 &#xff1a; yield关键字二 &#xff1a;var关键字三 &#xff1a;密封类四 &#xff1a;空指针异常&#xff1a;五&#xff1a;接口中的私有方法&#xff1a;六&#xff1a;instanceof关键字 前言 这里介绍jdk17相对于jdk1.8的部分新增特性。 一 &#xff…

python集成Bartender实现二维码打印

本文摘录于&#xff1a;https://blog.csdn.net/mynameisJW/article/details/105500773只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 这里上传我优化了一下的代码:https://download.csdn.net/download/chengdong1314/89522026 我这里弄…