当前位置: 首页 > news >正文

数据结构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>//宏定义&#xff0c;线性表的最大容量 #define MAX 30//类型重定义&#xff0c;表示要存放数据的类…...

Android SDK 平台工具版本说明

Android SDK Platform-Tools 是 Android SDK 的一个组件。它包含与 Android 平台进行交互的工具&#xff0c;主要是 adb 和 fastboot。虽然 adb 是 Android 应用开发所必需的&#xff0c;但应用开发者通常仅使用 Studio 安装的副本。如果您想直接从命令行使用 adb 并且未安装 S…...

Sharding-jdbc基本使用步骤以及执行原理剖析

一、基本使用步骤 1、需求说明 使用sharding-jdbc完成对订单表的水平分表&#xff0c;通过快速入门的开发&#xff0c;了解sharding-jdbc使用方法 人工创建两张表&#xff0c;t_order_1和t_order_2&#xff0c;这两张表是订单表拆分后的表&#xff0c;通过sharding-jdbc向订…...

mysql重置root密码(适用于5.7和8.0)

今天出一期重置mysql root密码的教程&#xff0c;适用于5.7和8.0&#xff0c;在网上搜索了很多的教程发现都没有效果&#xff0c;浪费了很多时间&#xff0c;尝试了多次之后发现这种方式是最稳妥的&#xff0c;那么废话不多说&#xff0c;往下看&#xff1a; 目录 第一步&…...

Linux下SVN客户端保存账号密码

参考文章&#xff1a;解决&#xff1a;Linux上SVN 1.12版本以上无法直接存储明文密码_linux svn 保存密码-CSDN博客新版本svn使用gpg-agent存储密码-CSDN博客svn之无法让 SVN 存储密码&#xff0c;即使配置设置为允许_编程设计_ITGUEST 方法一&#xff1a;明文方式保存密码 首…...

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. 本程序是自由软件&#xff1b;请参看源代码的版权声明。本软件没有任…...

HQChart使用教程30-K线图如何对接第3方数据42-DRAWTEXTREL,DRAWTEXTABS数据结构

HQChart使用教程30-K线图如何对接第3方数据42-DRAWTEXTREL,DRAWTEXTABS数据结构 效果图DRAWTEXTREL示例数据结构说明nametypecolorDrawVAlignDrawAlignDrawDrawTypeDrawDataFont DRAWTEXTABS示例数据结构说明nametypecolorDrawVAlignDrawAlignDrawDrawTypeDrawDataFont 效果图 …...

数仓高频面试 | 数仓为什么要分层

大家好&#xff0c;我是大D呀。 关于数仓分层&#xff0c;在面试过程中几乎是必问的。不过&#xff0c;面试官一般也不会直接考你数仓为什么要分层&#xff0c;而是在你介绍项目时&#xff0c;可能会换一种形式来穿插着问&#xff0c;比如数据链路为什么要这样设计&#xff0c…...

网络安全—部署CA证书服务器

网络拓扑 两台服务器在同一网段即可&#xff0c;即能够互相ping通。 安装步骤 安装证书系统 首先我们对计算机名进行确认&#xff0c;安装了证书系统后我们是不能随意更改计算机名字的&#xff0c;因为以后颁发的证书都是和计算机也就是这一台的服务器名字有关。 修改完成后开…...

MATLAB中circshift函数的原理分析——psf2otf函数的核心

之所以讲到MATLAB中circshift函数&#xff0c;也是源于Rafael Gonzalez的这个图&#xff0c;作为前几篇答廖老师问的blog的基础。 Rafael Gonzalez的这个图无论从哪幅图到哪幅图都不是直接的傅里叶变换或傅里叶逆变换&#xff0c;需要循环移位&#xff0c;即circshift函数。 这…...

js 惰性函数

惰性函数 是一种优化技术&#xff0c;主要用于避免重复判断和计算。它在第一次调用时确定最终的执行逻辑&#xff0c;并将其替换为适当的函数实现&#xff0c;从而在后续调用中跳过不必要的判断或初始化。 惰性函数的核心思想 第一次调用时执行初始化逻辑&#xff0c;并根据环…...

智能技术引领未来:自动图像标注的创新应用与发展

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;传知代码 欢迎大家点赞收藏评论&#x1f60a; 目录 概述算法原理核心逻辑效果演示使用方式参考文献 参考文献&#xff1a;需要本文的详细复现过程的项目源码、数据和预训练好的模型可从该地址处获…...

深入探索数据库世界:SQLite、Redis、MySQL 与数据库设计范式

数据库 深入探索数据库世界:SQLite、Redis、MySQL 与数据库设计范式一、SQLite 数据库全方位解析(一)创建与基本操作(二)数据存储与表结构设计(三)数据操作:增删改查(四)与 C 语言联合使用(五)防止 SQL 注入二、Redis 数据库深度剖析(一)数据存储类型与独特结构(…...

内网是如何访问到互联网的(华为源NAT)

私网地址如何能够访问到公网的&#xff1f; 在上一篇中&#xff0c;我们用任意一个内网的终端都能访问到百度的服务器&#xff0c;但是这是我们在互联网设备上面做了回程路由才实现的&#xff0c;在实际中&#xff0c;之前也说过运营商是不会写任何路由过来的&#xff0c;那对于…...

华为无线AC、AP模式与上线解析(Huawei Wireless AC, AP Mode and Online Analysis)

华为无线AC、AP模式与上线解析 为了实现fit 瘦AP的集中式管理&#xff0c;我们需要统一把局域网内的所有AP上线到AC&#xff0c;由AC做集中式管理部署。这里我们需要理解CAPWAP协议&#xff0c;该协议分为两种报文&#xff1a;1、管理报文 2、数据报文。管理报文实际在抓包过程…...

奖励模池化

奖励模池化 奖励模型概述 奖励模型(Reward Model)在机器学习,特别是强化学习领域中被广泛使用。它的主要作用是**对智能体(Agent)的行为进行评估并给予奖励。**例如,在训练一个机器人执行任务时,当机器人的动作符合预期目标(如成功抓取物品、按照正确路线行走等),奖励…...

基于django协同过滤的音乐推荐系统的设计与实现

一、摘要 随着现代音乐的快速发展&#xff0c;协同过滤的音乐推荐系统已成为人们业余生活的需求。该平台采用Python技术和django搭建系统框架&#xff0c;后台使用MySQL数据库进行信息管理&#xff1b;通过用户管理、音乐分类管理、音乐信息管理、歌曲数据管理、系统管理、我的…...

Tiptap,: 富文本编辑器入门与案例分析

Tiptap 是一个现代的富文本编辑器&#xff0c;基于 ProseMirror 打造&#xff0c;旨在提供一个灵活且功能强大的文本编辑解决方案。它具有开箱即用的能力&#xff0c;同时也允许开发者根据业务需求进行高度定制化扩展。与传统的富文本编辑器相比&#xff0c;Tiptap 提供了更精细…...

使用Linux的logrotate工具切割日志:Tomcat、NGINX(journal文件清理)

文章目录 引言I Tomcat日志切割配置轮转参数验证码II NGINX访问文件的配置和切割access.log 访问日志的配置使用Linux的logrotate工具切割日志验证文件切割III /run/log/journaljournalctl文件清理引言 journal文件清理: 只保留过去两天,清理之前的文件 journalctl --vacuu…...

CSS系列(11)-- 滤镜与混合模式详解

前端技术探索系列&#xff1a;CSS 滤镜与混合模式详解 &#x1f3a8; 致读者&#xff1a;探索视觉效果的艺术 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 CSS 滤镜与混合模式&#xff0c;学习如何创建独特的视觉效果。 滤镜效果详解 &#x1f680; 基础滤…...

3步轻松掌握:163MusicLyrics歌词下载完全指南

3步轻松掌握&#xff1a;163MusicLyrics歌词下载完全指南 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为找不到高质量的LRC歌词而烦恼吗&#xff1f;163MusicLyri…...

告别内置ADC的烦恼:用ADS1119搞定STM32/DSP的高精度电压采样(附完整代码)

告别内置ADC的烦恼&#xff1a;用ADS1119搞定STM32/DSP的高精度电压采样&#xff08;附完整代码&#xff09; 在嵌入式系统开发中&#xff0c;电压采样是基础却至关重要的环节。许多工程师在使用STM32或DSP内置ADC时&#xff0c;常会遇到精度不足、抗干扰能力差、无法测量差分信…...

【实战指南】STM32CubeMX UART配置进阶:从阻塞到中断+DMA的高效数据通信

1. UART通信模式选择指南 第一次接触STM32的UART通信时&#xff0c;很多人都会纠结该用哪种模式。我在实际项目中尝试过所有模式&#xff0c;总结下来就是&#xff1a;没有最好的模式&#xff0c;只有最适合当前场景的模式。先说说三种典型场景&#xff1a; 调试打印&#xff1…...

Boss直聘职位数据自动化采集:Python爬虫架构设计与工程实践

1. 项目概述与核心价值最近在技术社区里&#xff0c;看到不少朋友在讨论一个叫longsizhuo/BossZhiPin_Job_Search的项目。光看名字&#xff0c;你大概就能猜到&#xff0c;这是一个跟“Boss直聘”和“职位搜索”相关的自动化工具。作为一个在招聘数据分析和自动化领域摸爬滚打了…...

Supabase AI Agent技能库:安全集成数据库操作与边缘函数调用

1. 项目概述&#xff1a;当Supabase遇上AI Agent&#xff0c;一个技能库的诞生最近在捣鼓AI Agent应用开发&#xff0c;发现一个挺有意思的现象&#xff1a;大家都能用LangChain、LlamaIndex这些框架快速搭出个Agent的架子&#xff0c;但真想让这个Agent去干点具体、有用的活儿…...

飞书自动化开发实战:从脚本编写到事件驱动架构设计

1. 项目概述&#xff1a;飞书自动化&#xff0c;从“手动挡”到“自动驾驶”的进化 如果你每天的工作&#xff0c;有超过30%的时间是在飞书里重复着“点击-填写-发送”的枯燥操作&#xff0c;比如手动拉取数据生成日报、定时向群聊推送消息、或者根据特定条件审批流程&#xf…...

OpenClawTuto:从零构建高可靠GUI自动化脚本的工程实践指南

1. 项目概述与核心价值 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“OpenClawTuto”。光看名字&#xff0c;你可能会有点懵&#xff0c;这“OpenClaw”是啥&#xff1f;是开源爪子&#xff1f;还是某种工具&#xff1f;其实&#xff0c;这是一个围绕“OpenClaw”这个…...

Arduino与手机蓝牙通信:nRF8001 BLE模块硬件连接与软件配置全解析

1. 项目概述与核心价值如果你手头有一个Arduino项目&#xff0c;想让它和你的手机“说说话”&#xff0c;比如把传感器数据无线传到手机App上显示&#xff0c;或者用手机App远程控制几个LED灯&#xff0c;那么nRF8001这个蓝牙低功耗&#xff08;BLE&#xff09;模块绝对是你绕不…...

Carapace:统一跨Shell命令行补全的Go语言引擎

1. 项目概述&#xff1a;一个为Shell而生的全能补全引擎 如果你和我一样&#xff0c;每天有超过一半的工作时间是在终端里度过的&#xff0c;那你一定对命令行补全这件事又爱又恨。爱的是&#xff0c;一个恰到好处的补全能让你行云流水&#xff0c;效率倍增&#xff1b;恨的是…...

MySQL高可用与扩展-主从复制读写分离分库分表

当单库压力越来越大时&#xff0c;常见演进路线是先做主从复制&#xff0c;再做读写分离&#xff1b;如果数据量和写入压力继续增长&#xff0c;就需要考虑分库分表。 这三者解决的问题不同&#xff1a;方案主要解决什么主从复制数据冗余、读扩展、故障切换基础读写分离缓解读请…...