数据结构/作业/2024/7/7
搭建个场景:
将学生的信息,以顺序表的方式存储(堆区),并且实现封装函数︰1】顺序表的创建,
2】判满、
3】判空、
4】往顺序表里增加学生、5】遍历、
6】任意位置插入学生、7】任意位置删除学生、8】修改、
9】查找(按学生的学号查找)、10】去重、
11】销毁顺序表
main.c
#include "head.h"
int main(int argc,const char *argv[])
{//创建学生的顺序表seqlist_ptr p=create_list();//判断顺序表是否为满int p1=full_doubt(p);//判断顺序表是否为空int p2=empty_doubt(p);//顺序表中添加学生数据add(p,6666);add(p,1001);add(p,1002);add(p,1003);add(p,1004);//顺序表中输出学生数据 output(p);//在任意位置插入学生insert(p,3,1111); output(p);//删除任意位置的学生del(p,3);output(p);//更改学生IDchange_index(p,3,6666);output(p);//查找学生IDfind(p,6666);//去重del_same(p);output(p);//释放my_free(p);return 0;
}
fun.c
1 #include "head.h" 2 3 4 //1.创建学生的顺序表 5 seqlist_ptr create_list() 6 { 7 //申请堆区的空间 8 seqlist_ptr p=(seqlist_ptr)malloc(sizeof(seqlist)); 9 if(NULL==p) 10 { 11 printf("顺序表创建失败\n"); 12 return NULL; 13 } 14 15 p->len=0;//将顺序表中的长度清零 16 //将数组的长度清零 17 memset(p->ID,0,sizeof(p->ID)); 18 printf("创建顺序表成功\n"); 19 return p; 20 } 21 22 23 //2.判断顺序表是否为满 24 int full_doubt(seqlist_ptr p) 25 { 26 if(NULL==p) 27 { 28 printf("顺序表不合法,无法判断"); 29 return -1; 30 } 31 else if(p->len==MAX) 32 { 33 printf("顺序表满\n"); 34 return 1; 35 } 36 37 return 0; 38 } 39 40 41 //3.判断顺序表是否为空 42 int empty_doubt(seqlist_ptr p) 43 { 44 if(NULL==p) 45 { 46 printf("顺序表不合法,无法判断"); 47 } 48 else if(p->len==0) 49 { 50 printf("顺序表为空\n"); 51 return 1; 52 } 53 return 0; 54 } 55 56 57 //4.顺序表数据的增加(添加学生的id号) 58 int add(seqlist_ptr p,datatype a) 59 { 60 if(NULL==p || full_doubt(p)) 61 { 62 printf("无法增加\n"); 63 return 0; 64 } 65 p->ID[p->len]=a; 66 p->len++; 67 return 1; 68 } 69 70 71 //5.顺序表中输出学生数据 72 int output(seqlist_ptr p) 73 { 74 if(NULL==p || empty_doubt(p)) 75 { 76 printf("无法输出i\n"); 77 return 0; 78 } 79 for(int i=0;i<p->len;i++) 80 { 81 printf("%d ",p->ID[i]); 82 } 83 printf("\n"); 84 return 1; 85 } 86 87 88 //6.在任意位置插入学生数据 89 int insert(seqlist_ptr p,int index,datatype e) 90 { 91 if(NULL==p || index>=MAX || index<=0 || empty_doubt(p)) 92 { 93 printf("插入失败\n"); 94 return -1; 95 } 96 //此时的index表示数组的下标 97 index-=1; 98 for(int i=0;i<p->len-index;i++) 99 { //p->len表示未赋值的那个元素
100 p->ID[p->len-i]=p->ID[p->len-1-i];
101 }
102 //赋值
103 p->ID[index]=e;
104 //长度+1
105 p->len++;
106 return 1;
107 }
108
109
110 //7.删除任意位置的学生
111 int del(seqlist_ptr p,int index)
112 {
113 if(NULL==p || index>MAX || index<=0 || empty_doubt(p))
114 {
115 printf("删除失败\n");
116 return -1;
117 }
118 //此时index表示数组的下标
119 index-=1;
120 for(int i=index;i<p->len;i++)
121 {
122 p->ID[index]=p->ID[index+1];
123 }
124 p->len--;
125 return 1;
126 }
127
128
129 //8.任意位置更改学生ID
130 int change_index(seqlist_ptr p,int index,datatype e)
131 {
132 if(NULL==p || index>MAX || index <=0 || empty_doubt(p))
133 {
134 printf("更改失败\n");
135 return -1;
136 }
137 index-=1;
138 p->ID[index]=e;
139 return 1;
140 }
141
142
143 //9.查找学生ID
144 int find(seqlist_ptr p,datatype e)
145 {
146 if(NULL==p || empty_doubt(p))
147 {
148 printf("查找失败\n");
149 return -1;
150 }
151 int flag=0;
152 for(int i=0;i<p->len;i++)
153 {
154 if(p->ID[i]==e)
155 {
156 flag=1;
157 printf("查找的学生是第%d位学生\n",i+1);
158 return i;
159 }
160
161 if(flag=0)
162 {
163 printf("未查找到学生ID\n");
164 return 0;
165 }
166 }
167 }
168
169
170 //10.去重
171 int del_same(seqlist_ptr p)
172 {
173 if(NULL==p || empty_doubt(p))
174 {
175 printf("去重失败\n");
176 return -1;
177 }
178 for(int i=0;i<p->len;i++)
179 {
180 for(int j=i+1;j<p->len;j++)
181 {
182 if(p->ID[i]==p->ID[j])
183 {
184 del(p,j+1);
185 j--;
186 }
187 }
188 }
189 return 1;
190 }
191
192
193 //11 释放
194 int my_free(seqlist_ptr p)
195 {
196 if(NULL==p)
197 {
198 printf("释放失败\n");
199 return -1;
200 }
201 free(p);
202 printf("释放成功\n");
203 return 1;
204
205 }
~
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//顺序标容器存储学生个数的最大值
#define MAX 30
//宏替换ID的数据类型
typedef int datatype;
//创建顺序表用于存储学生的信息
typedef struct sequence
{ datatype ID[MAX]; //存储学生的个数 int len;
}seqlist,*seqlist_ptr; //1.创建学生的顺序表
seqlist_ptr create_list();
//2.判断顺序表是否为满
int full_doubt(seqlist_ptr p);
//3.判断顺序表是否为空
int empty_doubt(seqlist_ptr p);
//4.顺序表数据的增加(添加学生的id号)
int add(seqlist_ptr p,datatype a);
//5.顺序表中输出学生数据
int output(seqlist_ptr p);
//6.在任意位置插入学生数据
int insert(seqlist_ptr p,int index,datatype e);
//7.删除任意位置的学生
int del(seqlist_ptr p,int index);
//8.任意位置更改学生ID
int change_index(seqlist_ptr p,int index,datatype e);
//9.查找学生ID
int find(seqlist_ptr p,datatype e);
//10.去重
int del_same(seqlist_ptr p);
//11 释放
int my_free(seqlist_ptr p);
#endif
相关文章:

数据结构/作业/2024/7/7
搭建个场景: 将学生的信息,以顺序表的方式存储(堆区),并且实现封装函数︰1】顺序表的创建, 2】判满、 3】判空、 4】往顺序表里增加学生、5】遍历、 6】任意位置插入学生、7】任意位置删除学生、8】修改、 9】查找(按学生的学号查…...

隔离级别-隔离级别中的锁协议、隔离级别类型、隔离级别的设置、隔离级别应用
一、引言 1、DBMS除了采用严格的两阶段封锁协议来保证并发事务的可串行化,实现事务的隔离性,也可允许用户选择一个可以保证应用程序正确执行并且能够使并发度最大的隔离性等级 2、通常用隔离级别来描述隔离性等级,以下将主要介绍ANSI 92标准…...

【数据结构与算法】希尔排序
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注 ...

【机器学习】(基础篇一) —— 什么是机器学习
什么是机器学习 本系列博客为你从机器学习的介绍开始,使用大量的代码实战和验证,最终帮助你完全掌握什么是机器学习 人工智能、机器学习和深度学习的关系 人工智能(Artificial Intelligence,AI):是一门研…...
VitePress安装部署
VitePress安装部署 VitePress安装步骤 安装 Node环境 官网下载:https://nodejs.org/zh-cn 傻瓜式安装到完成 npm环境 安装完Node环境之后,可以直接运行下面的命令安装npm npm install -g pnpm关于pnpm源: 有时候需要国内源,…...
Spring的事务传播机制和隔离级别
Spring 提供了强大的事务管理机制,通过 @Transactional 注解或程序化事务管理方式,开发者可以轻松地在应用中启用事务特性。事务传播机制和隔离级别是 Spring 事务管理中的两个重要方面,了解它们有助于更好地控制事务的行为,确保数据的一致性和完整性。 1. 事务传播机制(…...

华为路由器静态路由配置(eNSP模拟实验)
实验目标 如图下所示,让PC1ping通PC2 具体操作 配置PC设备ip 先配置PC1的ip、掩码、网关。PC2也做这样的配置 配置路由器ip 配置G0/0/0的ip信息 #进入系统 <Huawei>system-view #进入GigabitEthernet0/0/0接口 [Huawei]int G0/0/0 #设置接口的ip和掩码 […...

antd实现简易相册,zdppy+vue3+antd实现前后端分离相册
前端代码 <template><a-image:preview"{ visible: false }":width"200"src"http://localhost:8889/download/1.jpg"click"visible true"/><div style"display: none"><a-image-preview-group:previe…...

PIP换源的全面指南
##概述 在Python的世界里,pip是不可或缺的包管理工具,它帮助开发者安装和管理Python软件包。然而,由于网络条件或服务器位置等因素,直接使用默认的pip源有时会遇到下载速度慢或者连接不稳定的问题。这时,更换pip源到一…...

陶建辉当选 GDOS 全球数据库及开源峰会荣誉顾问
近日,第二十三届 GOPS 全球运维大会暨 XOps 技术创新峰会在北京正式召开。本次会议重点议题方向包括开源数据库落地思考、金融数据库自主可控、云原生时代下数据库、数据库智能运维、数据库安全与隐私、开源数据库与治理。大会深入探讨这些方向,促进了数…...

Drools开源业务规则引擎(二)- Drools规则语言(DRL)
文章目录 1.DRL文件的组成:2.package3.import4.function5.query6.declare7.global8.rule8.1.规则属性8.2.LHS8.2.1.语法格式8.2.2.运算符优先级8.2.3.特殊的运算符1.matches, not matches2.contains, not contains3.memberOf, not memberOf4.in, notin5.soundslike6…...

PTA甲级1005:Spell It Right
错误代码: #include<iostream> #include<vector> #include<unordered_map> using namespace std;int main() {unordered_map<int, string> map {{0, "zero"}, {1, "one"}, {2, "two"}, {3, "three&qu…...

Vue笔记11-Composition API的优势
Options API存在的问题 使用传统Options API中,新增或者修改一个需求,就需要分别在data,methods,computed里修改,而这些选项分布在代码的各个地方,中间还穿插着其他Optional API,如果代码量上来…...

rancher管理多个集群
一、rancher部署 单独部署到一台机器上,及独立于k8s集群之外: 删除所有yum源,重新建yum源: # 建centos7.9的yum源 # cat CentOS-Base.repo # CentOS-Base.repo # # The mirror system uses the connecting IP address of the …...

某大会的影响力正在扩大,吞噬了整个数据库世界!
1.规模空前 你是否曾被那句“上有天堂,下有苏杭”所打动,对杭州的湖光山色心驰神往?7月,正是夏意正浓的时节,也是游览杭州的最佳时期。这座古典与现代交融的城市将迎来了第13届PostgreSQL中国技术大会。作为全球数据库…...
PostgreSQL主从复制:打造高可用数据库架构的秘籍
PostgreSQL主从复制:打造高可用数据库架构的秘籍 在当今的数字化时代,数据的安全性和可靠性是企业最为关注的问题之一。PostgreSQL作为一种强大的开源关系型数据库管理系统,提供了多种高可用性解决方案,其中主从复制是最为常用的…...

Fast R-CNN(论文阅读)
论文名:Fast R-CNN 论文作者:Ross Girshick 期刊/会议名:ICCV 2015 发表时间:2015-9 论文地址:https://arxiv.org/pdf/1504.08083 源码:https://github.com/rbgirshick/fast-rcnn 摘要 这篇论文提出了一…...

视觉语言模型:融合视觉与语言的未来
1. 概述 视觉语言模型(Vision-Language Models, VLMs)是能够同时处理和理解视觉(图像)和语言(文本)两种模态信息的人工智能模型。这种模型结合了计算机视觉和自然语言处理的技术,使得它们能够在…...

【CSAPP】-linklab实验
目录 实验目的与要求 实验原理与内容 实验步骤 实验设备与软件环境 实验过程与结果(可贴图) 实验总结 实验目的与要求 1.了解链接的基本概念和链接过程所要完成的任务。 2.理解ELF目标代码和目标代码文件的基本概念和基本构成 3.了解ELF可重定位目…...

UE C++ 多镜头设置缩放 平移
一.整体思路 首先需要在 想要控制的躯体Pawn上,生成不同相机对应的SpringArm组件。其次是在Controller上,拿到这个Pawn,并在其中设置输入响应,并定义响应事件。响应事件里有指向Pawn的指针,并把Pawn的缩放平移功能进行…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...