数据结构day3作业
一、完整功能【顺序表】的创建
【seqList.h】
#ifndef __SEQLIST_H__
#define __SEQLIST_H__#include <stdio.h>
#include <string.h>
#include <stdlib.h>//宏定义,线性表的最大容量
#define MAX 30//类型重定义,表示要存放数据的类型
typedef int DataType;//定义顺序表的结构体类型
typedef struct sequence
{//定义一个数组,存放连续的数据DataType data[MAX];//顺序表长度,已存放的元素个数int len;
}seqList, *seqListPtr;//创建一个顺序表
seqListPtr seq_create();//判空
int empty(seqListPtr S);//判满
int fill(seqListPtr S);//顺序表增加
int seq_add(seqListPtr S, DataType e);//顺序的遍历
void show(seqListPtr S);//任意位置插入数据
int index_add(seqListPtr S, int index, DataType e);//任意位置删除数据
int index_del(seqListPtr S, int index);//通过位置修改数据
void index_change(seqListPtr S, int index, DataType e);//按值查找,返回下标
int value_index(seqListPtr S, DataType e);//去重
void repeat(seqListPtr S);//销毁
void my_free(seqListPtr *S);#endif
【seqList.c】
#include "seqList.h"//创建一个顺序表
seqListPtr seq_create()
{//在堆区申请顺序表的大小空间,返回主程序使用seqListPtr S = (seqListPtr)malloc(sizeof(seqList));//判断申请空间是否合法if(NULL== S){printf("创建失败!\n");return NULL;}printf("创建成功!\n");//顺序表的长度置为0S->len = 0;//数组清空memset(S->data, 0, sizeof(S->data));return S;
}int empty(seqListPtr S)
{//判断所接受的顺序表是否合法if(NULL == S){printf("判空失败!\n");return -1;}return S->len==0;
}int fill(seqListPtr S)
{//判断所接受的顺序表是否合法if(NULL == S){printf("判满失败!\n");return -1;}return S->len == MAX;
}int seq_add(seqListPtr S, DataType e)
{//判断所接受的顺序表是否合法//判满if(NULL == S || fill(S)){printf("增加失败!\n");return 0;}//放入数据S->data[S->len] = e;//增加成功 顺序表长度自增S->len++;return 1;
}void show(seqListPtr S)
{//判读所接受的顺序表是否合法//判空if(NULL == S || empty(S)){printf("遍历失败!\n");return;}for(int i=0; i<S->len; i++){printf("%d ", S->data[i]);}printf("\n");
}//任意位置插入数据
int index_add(seqListPtr S, int index, DataType e)
{//判断所接受的顺序表是否合法//判满//判断插入的位置是否合理if(NULL == S || fill(S) || index<=0 || index > S->len+1){printf("插入失败!\n");return 0;}//插入位置对应下标index = index - 1;//腾位for(int i=0; i<S->len-index; i++){S->data[S->len-i] = S->data[S->len-1-i];}//插入数据S->data[index] = e;//顺序表长度自增S->len++;return 1;
}//任意位置删除数据
int index_del(seqListPtr S, int index)
{//判断所接受的顺序表是否合法//判空//判断删除的位置是否合理if(NULL == S || empty(S) || index<=0 || index>S->len){printf("删除失败!\n");return 0;}//删除:从前往后//位置对应的下标index = index -1;for(int i=index; i<S->len; i++){S->data[i] = S->data[i+1];}//顺序表长度自减S->len--;return 1;
}//通过位置修改数据
void index_change(seqListPtr S, int index, DataType e)
{//判断所接受的顺序表是否合法//判空//判断要修改的位置是否合理//判断新值和旧值是否相等if(NULL==S || empty(S) || index<=0 || index>S->len || S->data[index-1]==e){printf("修改失败!\n");return;}//修改(index是用户指定的位置,但计算机下标是从0开始)S->data[index-1]=e;
}//按值查找,返回下标
int value_index(seqListPtr S, DataType e)
{//判断所接受的顺序表是否合法//判空if(NULL==S || empty(S)){printf("查找失败!\n");return -1;}for(int i=0; i<S->len; i++){if(S->data[i]==e){return i;}}printf("查无此数据!\n");return -1;
}//去重
void repeat(seqListPtr S)
{if(NULL==S || S->len<=1){printf("去重失败!\n");return;}//顺序表中的每个元素for(int i=0; i<S->len; i++){//遍历i元素下面所有的元素for(int j=i+1; j<S->len; j++){if(S->data[i]==S->data[j]){index_del(S, j+1); //按位置删除(需要注意完全删除)j--;}}}
}//销毁
void my_free(seqListPtr *S)
{//判断所接受的顺序表是否合法if(NULL==*S){printf("销毁失败!\n");return;}free(*S);S=NULL;printf("销毁成功!\n");
}
【main.c】
#include "seqList.h"int main()
{//创建一个顺序表seqListPtr S = seq_create();//顺序表的增加seq_add(S, 10);seq_add(S, 20);seq_add(S, 30);seq_add(S, 40);seq_add(S, 50);//顺序表的遍历show(S);//任意位置插入数据index_add(S, 3, 3344);show(S);//非法插入测试index_add(S, 0, 3300);//任意位置删除数据index_del(S, 2);show(S);//非法删除测试index_del(S, 8);//通过位置修改数据index_change(S, 4, 9988);show(S);//按值查找,返回下标int index = value_index(S, 9988);index_change(S, index+1, 88099);show(S);//去重//先添加一些测试数据seq_add(S, 10);seq_add(S, 20);seq_add(S, 10);seq_add(S, 10);seq_add(S, 30);seq_add(S, 20);seq_add(S, 20);seq_add(S, 50);seq_add(S, 40);seq_add(S, 50);show(S);repeat(S);show(S);//销毁my_free(&S);S=NULL;return 0;
}
【执行结果】

相关文章:
数据结构day3作业
一、完整功能【顺序表】的创建 【seqList.h】 #ifndef __SEQLIST_H__ #define __SEQLIST_H__#include <stdio.h> #include <string.h> #include <stdlib.h>//宏定义,线性表的最大容量 #define MAX 30//类型重定义,表示要存放数据的类…...
Android SDK 平台工具版本说明
Android SDK Platform-Tools 是 Android SDK 的一个组件。它包含与 Android 平台进行交互的工具,主要是 adb 和 fastboot。虽然 adb 是 Android 应用开发所必需的,但应用开发者通常仅使用 Studio 安装的副本。如果您想直接从命令行使用 adb 并且未安装 S…...
Sharding-jdbc基本使用步骤以及执行原理剖析
一、基本使用步骤 1、需求说明 使用sharding-jdbc完成对订单表的水平分表,通过快速入门的开发,了解sharding-jdbc使用方法 人工创建两张表,t_order_1和t_order_2,这两张表是订单表拆分后的表,通过sharding-jdbc向订…...
mysql重置root密码(适用于5.7和8.0)
今天出一期重置mysql root密码的教程,适用于5.7和8.0,在网上搜索了很多的教程发现都没有效果,浪费了很多时间,尝试了多次之后发现这种方式是最稳妥的,那么废话不多说,往下看: 目录 第一步&…...
Linux下SVN客户端保存账号密码
参考文章:解决:Linux上SVN 1.12版本以上无法直接存储明文密码_linux svn 保存密码-CSDN博客新版本svn使用gpg-agent存储密码-CSDN博客svn之无法让 SVN 存储密码,即使配置设置为允许_编程设计_ITGUEST 方法一:明文方式保存密码 首…...
centos7.9 gcc升级到11.2.1
一、信息查看 # cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) # gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) Copyright © 2015 Free Software Foundation, Inc. 本程序是自由软件;请参看源代码的版权声明。本软件没有任…...
HQChart使用教程30-K线图如何对接第3方数据42-DRAWTEXTREL,DRAWTEXTABS数据结构
HQChart使用教程30-K线图如何对接第3方数据42-DRAWTEXTREL,DRAWTEXTABS数据结构 效果图DRAWTEXTREL示例数据结构说明nametypecolorDrawVAlignDrawAlignDrawDrawTypeDrawDataFont DRAWTEXTABS示例数据结构说明nametypecolorDrawVAlignDrawAlignDrawDrawTypeDrawDataFont 效果图 …...
数仓高频面试 | 数仓为什么要分层
大家好,我是大D呀。 关于数仓分层,在面试过程中几乎是必问的。不过,面试官一般也不会直接考你数仓为什么要分层,而是在你介绍项目时,可能会换一种形式来穿插着问,比如数据链路为什么要这样设计,…...
网络安全—部署CA证书服务器
网络拓扑 两台服务器在同一网段即可,即能够互相ping通。 安装步骤 安装证书系统 首先我们对计算机名进行确认,安装了证书系统后我们是不能随意更改计算机名字的,因为以后颁发的证书都是和计算机也就是这一台的服务器名字有关。 修改完成后开…...
MATLAB中circshift函数的原理分析——psf2otf函数的核心
之所以讲到MATLAB中circshift函数,也是源于Rafael Gonzalez的这个图,作为前几篇答廖老师问的blog的基础。 Rafael Gonzalez的这个图无论从哪幅图到哪幅图都不是直接的傅里叶变换或傅里叶逆变换,需要循环移位,即circshift函数。 这…...
js 惰性函数
惰性函数 是一种优化技术,主要用于避免重复判断和计算。它在第一次调用时确定最终的执行逻辑,并将其替换为适当的函数实现,从而在后续调用中跳过不必要的判断或初始化。 惰性函数的核心思想 第一次调用时执行初始化逻辑,并根据环…...
智能技术引领未来:自动图像标注的创新应用与发展
🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 概述算法原理核心逻辑效果演示使用方式参考文献 参考文献:需要本文的详细复现过程的项目源码、数据和预训练好的模型可从该地址处获…...
深入探索数据库世界:SQLite、Redis、MySQL 与数据库设计范式
数据库 深入探索数据库世界:SQLite、Redis、MySQL 与数据库设计范式一、SQLite 数据库全方位解析(一)创建与基本操作(二)数据存储与表结构设计(三)数据操作:增删改查(四)与 C 语言联合使用(五)防止 SQL 注入二、Redis 数据库深度剖析(一)数据存储类型与独特结构(…...
内网是如何访问到互联网的(华为源NAT)
私网地址如何能够访问到公网的? 在上一篇中,我们用任意一个内网的终端都能访问到百度的服务器,但是这是我们在互联网设备上面做了回程路由才实现的,在实际中,之前也说过运营商是不会写任何路由过来的,那对于…...
华为无线AC、AP模式与上线解析(Huawei Wireless AC, AP Mode and Online Analysis)
华为无线AC、AP模式与上线解析 为了实现fit 瘦AP的集中式管理,我们需要统一把局域网内的所有AP上线到AC,由AC做集中式管理部署。这里我们需要理解CAPWAP协议,该协议分为两种报文:1、管理报文 2、数据报文。管理报文实际在抓包过程…...
奖励模池化
奖励模池化 奖励模型概述 奖励模型(Reward Model)在机器学习,特别是强化学习领域中被广泛使用。它的主要作用是**对智能体(Agent)的行为进行评估并给予奖励。**例如,在训练一个机器人执行任务时,当机器人的动作符合预期目标(如成功抓取物品、按照正确路线行走等),奖励…...
基于django协同过滤的音乐推荐系统的设计与实现
一、摘要 随着现代音乐的快速发展,协同过滤的音乐推荐系统已成为人们业余生活的需求。该平台采用Python技术和django搭建系统框架,后台使用MySQL数据库进行信息管理;通过用户管理、音乐分类管理、音乐信息管理、歌曲数据管理、系统管理、我的…...
Tiptap,: 富文本编辑器入门与案例分析
Tiptap 是一个现代的富文本编辑器,基于 ProseMirror 打造,旨在提供一个灵活且功能强大的文本编辑解决方案。它具有开箱即用的能力,同时也允许开发者根据业务需求进行高度定制化扩展。与传统的富文本编辑器相比,Tiptap 提供了更精细…...
使用Linux的logrotate工具切割日志:Tomcat、NGINX(journal文件清理)
文章目录 引言I Tomcat日志切割配置轮转参数验证码II NGINX访问文件的配置和切割access.log 访问日志的配置使用Linux的logrotate工具切割日志验证文件切割III /run/log/journaljournalctl文件清理引言 journal文件清理: 只保留过去两天,清理之前的文件 journalctl --vacuu…...
CSS系列(11)-- 滤镜与混合模式详解
前端技术探索系列:CSS 滤镜与混合模式详解 🎨 致读者:探索视觉效果的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 滤镜与混合模式,学习如何创建独特的视觉效果。 滤镜效果详解 🚀 基础滤…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...
