数据结构/作业/2024/7/7

news2024/12/31 4:14:47

搭建个场景:
将学生的信息,以顺序表的方式存储(堆区),并且实现封装函数︰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);
    //更改学生ID
    change_index(p,3,6666);
    output(p);
    //查找学生ID
    find(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                                               

 

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

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

相关文章

通俗易懂的信道复用技术详解:频分、时分、波分与码分复用

在现代通信网络中&#xff0c;信道复用技术 扮演着至关重要的角色。今天&#xff0c;我们将用通俗易懂的语言来讲解几种常见的信道复用技术&#xff1a;频分复用、时分复用、波分复用 和 码分复用。这篇文章特别适合基础小白&#xff0c;希望能帮助你快速理解这些概念。 一、频…

【Excel】 批量跳转图片

目录标题 1. CtrlA全选图片 → 右键 → 大小和属性2. 取消 锁定纵横比 → 跳转高度宽度 → 关闭窗口3. 最后一图拉到最后一单元格 → Alt吸附边框![](https://i-blog.csdnimg.cn/direct/d56ac1f41af54d54bb8c68339b558dd1.png)4. CtrlA全选图片 → 对齐 → 左对齐 → 纵向分布!…

QT5.14.2与Mysql8.0.16配置笔记

1、前言 我的QT版本为 qt-opensource-windows-x86-5.14.2。这是QT官方能提供的自带安装包的最近版本&#xff0c;更新的版本需要自己编译源代码&#xff0c;可点击此链接进行下载&#xff1a;Index of /archive/qt/5.14/5.14.2&#xff0c;选择下载 qt-opensource-windows-x86…

掌握java泛型

泛型方法 一般定义如下&#xff0c;即方法的前面加了个<T> public class FTest {public <T> List<T> f(T t){...}; }三种泛型参数推断方式&#xff1a; 直接在f()前面加确定泛型 fTest.<Integer>f(xxx)通过输入参数确定&#xff0c; 下面这个推断为…

STM32-外部中断浅析

本篇解释了STM32中断原理 MCU为什么需要中断 中断&#xff0c;是嵌入式系统中很重要的一个功能&#xff0c;在系统运行过程中&#xff0c;当出现需要立刻处理的情况时&#xff0c;暂停当前任务&#xff0c;转而处理紧急任务&#xff0c;处理完毕后&#xff0c;恢复之前的任务…

DPDK源码分析之(1)libmbuf模块

DPDK源码分析之(1)libmbuf模块 Author&#xff1a;OnceDay Date&#xff1a;2024年7月2日 漫漫长路&#xff0c;有人对你笑过嘛… 全系列文档可参考专栏&#xff1a;源码分析_Once-Day的博客-CSDN博客 参考文档&#xff1a; DPDK downloadGetting Started Guide for Linux…

Java面试题--JVM大厂篇之深入解析G1 GC——革新Java垃圾回收机制

目录 引言: 正文&#xff1a; 一、G1 GC的区域划分及其作用 1. 伊甸园区&#xff08;Eden Region&#xff09; 2. 幸存者区&#xff08;Survivor Region&#xff09; 3. 老年代区&#xff08;Old Generation Region&#xff09; 二、区域划分的优势: 三、图片解析: 结…

记录自己Ubuntu加Nvidia驱动从入门到入土的一天

前言 记录一下自己这波澜壮阔的一天&#xff0c;遇到了很多问题&#xff0c;解决了很多问题&#xff0c;但是还有很多问题&#xff0c;终于在晚上的零点彻底放弃&#xff0c;重启windows。 安装乌班图 1.安装虚拟机 我开始什么操作系统的基础都没有&#xff0c;网上随便搜了…

代码随想录算法训练营第四十九天| 300.最长递增子序列 , 674. 最长连续递增序列 , 718. 最长重复子数组

300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int lengthOfLIS(int[] nums) {int[] dp new int[nums.length];dp[0] 1;for(int i1;i<nums.length;i){for(int j0;j<i;j){if(nums[i] > nums[j]){dp[i] Math.max(dp[j],dp[i])…

(十) Docker compose 本地部署 apollo

文章目录 1、apollo2、数据库准备3、启动后会用到的几个地址4、docker-compose运行 apollo方式一&#xff1a;使用容器 hostName 作为网络媒介方式二&#xff1a;使用端口映射固定 ip 作为网络媒介 6、客户端 1、apollo https://www.apolloconfig.com/#/zh/deployment/quick-s…

微软Edge浏览器全解析:从速度到安全性的全面体验

微软Edge浏览器&#xff0c;自2015年首次亮相以来&#xff0c;已经成为了浏览器市场上不可忽视的一股力量。它不仅集成了Windows 10的许多原生功能&#xff0c;还在速度和安全性上进行了大量的优化。本文将全面解析微软Edge浏览器的各项特性&#xff0c;带您领略这款浏览器的魅…

Linux笔记之三

Linux笔记之三 一、用户组管理二、磁盘管理三、进程管理总结 一、用户组管理 每个用户都有一个用户组&#xff0c;系统可以对一个用户组中的所有用户进行集中管理&#xff08;开发、测试、运维、root&#xff09;。不同Linux系统对用户组的管理涉及用户组的添加、删除和修改。…

基于Java+SpringMvc+Vue技术的图书管理系统的设计与实现(60页论文参考)

博主介绍&#xff1a;硕士研究生&#xff0c;专注于Java技术领域开发与管理&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经…

防火墙概述

1、防火墙 防火墙顾名思义就是防止火灾发生时&#xff0c;火势烧到其它区域&#xff0c;使用由防火材料砌的墙。在网络安全中&#xff0c;防火墙的作用就是保护本地网络不受到外部网络或恶意程序的伤害。 防火墙的核心任务是控制和防护&#xff0c;即通过安全策略识别流量并做…

Kafka抛弃Zookeeper后如何启动?

Kafaka如何下载 官网地址 目前Kafka最新的版本就是3.7.1 我们可以看到下面这两个版本信息&#xff1f;什么意思呢&#xff1f; Scala 2.12 - kafka_2.12-3.7.1.tgz (asc, sha512)Scala 2.13 - kafka_2.13-3.7.1.tgz (asc, sha512) 我们应该知道&#xff0c;一个完整的Kafka实…

【Excel】把一列姓名快速填充到多列表格

目录标题 1. 输入A1 → 向右填充 → 输入A5 → 向右填充2. 选中2行单元格 → 向下填充3. CtrlH → 替换 → 全部替换 1. 输入A1 → 向右填充 → 输入A5 → 向右填充 2. 选中2行单元格 → 向下填充 3. CtrlH → 替换 → 全部替换

用Goaccess对Web及雷池WAF日志实现可视化分析

君衍. 一、项目环境介绍二、Goaccess1、Goaccess介绍2、存储方式3、配置选项4、自定义日志/日期格式5、特殊格式说明符 三、雷池访问日志1、配置文件改变2、docker配置3、示例测试 四、Goaccess安装1、安装依赖2、编译安装 五、Goaccess对Nginx日志分析1、常用命令参数2、终端模…

【server】springboot 整合 redis

1、redis 使用模式 1.1 单机模式 1.1.1 编译安装方式 1.1.1.1 下载 Redis的安装非常简单&#xff0c;到Redis的官网&#xff08;Downloads - Redis&#xff09;&#xff0c;下载对应的版本&#xff0c;简单几个命令安装即可。 1.1.1.2 编译安装 tar xzf redis-stable.tar.…

【链表】【双指针】1、环形链表+2、环形链表 II+3、相交链表

2道简单1道中等&#xff0c;链表的双指针相关问题就告一段落&#xff0c;下一步刷新的题目。 1、环形链表&#xff08;难度&#xff1a;简单&#xff09; 该题对应力扣网址 AC代码 常见思路&#xff0c;slow指针每次走一步&#xff0c;fast指针每次走两步&#xff0c;如果fa…

大语言模型基础

大语言基础 GPT : Improving Language Understanding by Generative Pre-Training 提出背景 从原始文本中有效学习的能力对于减轻自然语言处理中对监督学习的依赖至关重要。很多深度学习方法需要大量人工标注的数据&#xff0c;限制了它们在很多领域的应用&#xff0c;收集更…