快速掌握C语言——数据结构【创建顺序表】多文件编译

 1.数据结构脑图(未完)

2.顺序表其他操作 

 3.功能函数封装

 

 4 完整代码

1>头文件test.h

#ifndef __TEST_H__
#define __TEST_H__

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

//宏定义 线性表的最大容量
#define MAX 30

//类型重定义 表示要存放的数据的类型
//typedef  int  datatype;

//定义顺序表的结构图类型
typedef struct sequence
{
	int data[MAX];
	int len;

}seqlist,*seqlistPtr;
//创建顺序表
seqlistPtr seq_create();
//判空
int empty(seqlistPtr S);
//判满
int fill(seqlistPtr S);
//尾部插入数据
int seq_add(seqlistPtr S,int e);
//遍历
void show(seqlistPtr S);
//任意位置插入1
int insert(seqlistPtr S,int index,int value);

//任意位置插入2
int index_add(seqlistPtr S,int index,int e);
//任意位置删除
int index_del(seqlistPtr S,int index);

//任意位置修改
void index_change(seqlistPtr S,int index,int e);
//按值查找
int value_index(seqlistPtr S, int e);
//去重
void repeat(seqlistPtr S);
//销毁
void my_free(seqlistPtr *S);

#endif

2.>源文件test.c

#include "test.h"
//1.
//    创建一个顺序表
seqlistPtr seq_create()
{//在堆区申请顺序表的大小空间,返回主程序使用
	seqlistPtr S=(seqlistPtr)malloc(sizeof(seqlist));
//判断申请空间是否合法
	if (NULL==S)
	{
		printf("创建失败\n");
		return NULL;
	}
	printf("创建成功\n");
//顺序表长度置零
	S->len=0;
//数组清空
	memset(S->data,0,sizeof(S->data));
	return S;
}

//2
//   判空
int empty(seqlistPtr S)
{
	//判断接受的顺序表是否为空
	if (NULL==S)
	{
		printf("判空失败\n");
		return -1;
	}
	//判断顺序表长度是否为0
	return S->len==0;
}

//3.
//   判满
int fill(seqlistPtr S)
{
	if (NULL==S)
	{
		printf("判满失败\n");
		return -1;
	}
//判断顺序表的长度和顺序表长度最大容量是否相等
	return S->len==MAX;
}

//4.
//    顺序表的增加
int seq_add(seqlistPtr S,int e)
{
	//判断接受的顺序表是否合法
	//判满
	if (NULL==S ||fill(S))
	{
		printf("增加失败\n");
		return 0;
	}
	//放入数据
	S->data[S->len]=e;
	//增加成功  顺序表长度自增
	S->len++;
	return 1;
}

//5
//   顺序表的遍历
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");
}

//6
//     在顺序表插入一个数
int insert(seqlistPtr S,int index,int value)
{
	if (index <0||index>S->len||S->len>=MAX)
	{
		printf("插入位置不合法\n");
		return 0;
	}
	for (int i=S->len;i>index;i--)
	{
		S->data[i]=S->data[i-1];
	}
	S->data[index]=value;
	S->len++;
	return 1 ;

}

//7.
//在顺序表插入一个数方法2
int index_add(seqlistPtr S,int index,int 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;
}

//8.
//   任意位置删除
int index_del(seqlistPtr S,int index)
{
	if (NULL==S||empty(S)||index<0||index>S->len)
	{

		printf("删除失败\n");
		return 0;
	}

	//	index-=1;
	for(int i= index;i<S->len;i++)
	{
		S->data[i]=S->data[i+1];
	}
	S->len--;
	return 1;
}
//9.
//  通过位置修改
void index_change(seqlistPtr S,int index,int e)
{
	if (NULL==S||empty(S)||index<0||index>S->len)
	{

		printf("修改失败\n");
		return ;
	}
	//修改
	//	S->data[index-1]=e;
	S->data[index]=e;

}

//10
//  根据值查找下标
int value_index(seqlistPtr S, int e)
{
	if (NULL==S||empty(S))
	{

		printf("查找失败");
		return -1;
	}
	for (int i=0;i<S->len;i++)
	{
		if (S->data[i]==e)
		{
			printf("%d \n",i);
			return i;
		}

	}
	printf("查无此数");
	return -1;
}
//11
//    去除重复数据
void repeat(seqlistPtr S)
{
	if (NULL==S||S->len<=1)
	{	printf("去重失败");
		return;
	}

	for (int i=0;i<S->len;i++)
	{
		for(int j=i+1;j<S->len;j++)
			if (S->data[i]==S->data[j])
			{
				index_del (S,j);
				j--;
			}

	}
}

// 12
//   释放内存
void my_free(seqlistPtr *S)
{
	if(NULL==*S)
	{
		printf("销毁失败");
		return ;
	}
	free (*S);

	S=NULL ;

	printf("销毁成功");
}

3>测试文件main.c

#include "test.h"

int main(int argc, const char *argv[])
{
	//创建顺序表
   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);

//任意位置插入数据1方法
   insert(S,0,1);
   insert(S,1,2);
   insert(S,2,3);

   show(S);
//任意位置插入数据2方法
   index_add(S,5,666);

   show(S);

//删除指定位置的数据
	index_del(S,0);
	show(S);

//修改指定位置数据
	index_change(S,0,99);
	show(S);

//按值查找   
	value_index(S,666);
	show(S);

//按值查找并删除
	index_del(S,value_index(S,666));
	show(S);

//尾部插入多个数据
   seq_add(S,10);
   seq_add(S,20);
   seq_add(S,30);
   seq_add(S,10);
   seq_add(S,10);
   seq_add(S,20);
   seq_add(S,20);
   seq_add(S,40);
   seq_add(S,30);
   seq_add(S,50);
   show(S);

//去重
   repeat(S);
   show(S);
  

	return 0;
}

后续→c语言——数据结构【链表:单向链表】-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 中的 mkdir 命令:深入解析

在 Linux 系统中&#xff0c;mkdir 命令用于创建目录。它是文件系统管理中最基础的命令之一&#xff0c;广泛应用于日常操作和系统管理中。本文将深入探讨 mkdir 命令的功能、使用场景、高级技巧&#xff0c;并结合 GNU Coreutils 的源码进行详细分析。 1. mkdir 命令的基本用法…

STM32F407+LAN8720A +LWIP +FreeRTOS UDP通讯

STM32F407+LAN8720A +LWIP +FreeRTOS ping通 上一篇实现了LWIP ping 通 本篇实现UDP通讯 实现如下功能: 串口1空闲中断+DMA接收,收到数据用UDP发送UDP接收,收到数据用串口1发送STM32CUBEIDE配置和代码 1. 配置UARAT1的空闲中断+DMA接收 UART1接收到数据,释放信号量,在任…

【蓝桥杯选拔赛真题94】Scratch巡逻的直升机 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 scratch巡逻的直升机 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 sc…

非前后端分离项目,通过拦截器,对前端发送网络访问地址

一、背景 在非前后端分离的web应用开发过程中&#xff0c;在html中不可避免的需要请求项目地址去访问接口或者静态资源&#xff0c;但是开发环境、测试环境以及生产环境不同&#xff0c;地址也不同&#xff0c;避免频繁修改代码&#xff0c;可以通过自动获取访问地址通过拦截器…

人工智能大语言模型起源篇(一),从哪里开始

序言&#xff1a;许多人最初接触人工智能都是在ChatGPT火热之际&#xff0c;并且大多停留在应用层面。对于希望了解其技术根源的人来说&#xff0c;往往难以找到方向。因此&#xff0c;我们编写了《人工智能大语言模型起源篇》&#xff0c;旨在帮助读者找到正确的学习路径&…

FFmpeg功能使用

步骤&#xff1a;1&#xff0c;安装FFmpeg Download FFmpeg 在这里点击->Windows builds from gyan.dev&#xff1b;如下图 会跳到另外的下载界面&#xff1a; 在里面下拉选择点击ffmpeg-7.1-essentials_build.zip&#xff1a; 即可下载到FFmpeg&#xff1b; 使用&#…

【Unity基础】Unity中如何实现图形倒计时

为了在Unity中实现一个图形倒计时&#xff0c;除了代码部分&#xff0c;还需要一些UI元素的创建和设置。本文以环形倒计时为例&#xff0c;以下是完整的步骤&#xff0c;涵盖了如何创建UI元素、设置它们&#xff0c;以及如何编写控制环形倒计时进度的脚本。 1. 创建UI元素 创建…

2024 中央企业数据资产化及数据资产入表场景建设白皮书

本文介绍了中央企业数据资产化的重要性及其入表场景建设。白皮书详细阐述了数据资产化的概念、实施步骤和关键挑战&#xff0c;提出了一系列解决方案。文章还强调了数据资产入表的重要性&#xff0c;以提高数据的透明度和质量&#xff0c;推动企业数字化转型。 重点内容&#…

电力场景输电线本体分割数据集labelme格式1629张1类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;1629 标注数量(json文件个数)&#xff1a;1629 标注类别数&#xff1a;1 标注类别名称:["csv_ct"] 每个类别标注的框数&…

【机器学习】机器学习的基本分类-无监督学习-t-SNE(t-分布随机邻域嵌入)

t-SNE&#xff08;t-分布随机邻域嵌入&#xff09; t-SNE&#xff08;t-distributed Stochastic Neighbor Embedding&#xff09;是一种用于降维的非线性技术&#xff0c;常用于高维数据的可视化。它特别适合展示高维数据在二维或三维空间中的分布结构&#xff0c;同时能够很好…

哈尔滨工业大学《2024年801自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《哈尔滨工业大学801自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2024年真题 Part1&#xff1a;2024年完整版真题 2024年真题

数据可视化:提升年度报表分析效率的新路径

在当今复杂多变的商业环境中&#xff0c;企业年度报表不仅是反映企业过去一年经营成果的重要文件&#xff0c;更是指导未来战略规划的基石。它如同一面镜子&#xff0c;既映照出企业的辉煌成就&#xff0c;也不避讳地揭示了存在的问题与挑战。本文将从企业年度报表的编制原则、…

探秘Redis哨兵模式:原理、运行与风险全解析

一、引言 Redis 概述 在当今的数据存储领域&#xff0c;Redis 占据着十分重要的地位。它是一个内存中的数据存储&#xff0c;凭借其出色的性能和丰富的功能&#xff0c;被数百万开发人员广泛应用于诸多场景之中&#xff0c;已然成为构建高性能、可扩展应用程序的得力工具。 从…

芯品荟|SWM221系列芯片之TFTLCD彩屏显示及控制

“革新未来&#xff0c;智驭控制新纪元”&#xff0c;由广东华芯微特集成电路有限公司市场总监张琢&#xff0c;对SWM221系列的强大功能表现进行了整体介绍。 确实&#xff0c;华芯微特在TFTLCD显示及控制有十多年应用基础和积累的团队&#xff0c;仍勇于挑战&#xff0c;自我…

Liinux下VMware Workstation Pro的安装,建议安装最新版本17.61

建议安装最新版本17.61&#xff0c;否则可能有兼容性问题 下载VMware Workstation安装软件 从官网网站下载 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro 选择所需版本 现在最新版本是17.61&#xff0c;否则可能有兼容性问题…

pyfink1.20版本下实现消费kafka中数据并实时计算

1、环境 JDK版本&#xff1a;1.8.0_412python版本&#xff1a;3.10.6apache-flink版本&#xff1a;1.20.0flink版本&#xff1a;1.20kafka版本&#xff1a;kafka_2.12-3.1.1flink-sql-connector-kafka版本&#xff1a;3.3.0-1.202、执行python-flink脚本 从kafka的demo获取消…

Python 写的《桌面时钟》屏保

原代码&#xff1a; # 日历式时钟 # 导入所需的库 # 作者&#xff1a;Hoye # 日期&#xff1a;2024年12月16日 # 功能&#xff1a;显示当前日期、星期、时间&#xff0c;并显示模拟时钟 import tkinter as tk from tkinter import ttk import time import math import sysdef …

51c自动驾驶~合集41

我自己的原文哦~ https://blog.51cto.com/whaosoft/12830614 #SFPNet 迈向通用Lidar分割&#xff01;取代Transformer的新架构SFPNet 迈向通用激光雷达语义分割&#xff08;&#xff09;&#xff0c;取代Transformer的新架构SFPNet&#xff0c;新数据集S.MID 论文标题&am…

前端之CSS光速入门

一、CSS介绍 什么是CSS? CSS(Cascading Style Sheet),层叠样式表,用于控制页面的样式. CSS能够对网页中元素位置的排版进行像素级的精确控制,实现美化页面的效果.能够做到页面的样式和结构分离.&#xff08;CSS可以理解为"东方四大邪术"的化妆术.对页面展示进行化…

P8615 拼接平方数 P8699 排列数

文章目录 [蓝桥杯 2014 国 C] 拼接平方数[蓝桥杯 2019 国 B] 排列数 [蓝桥杯 2014 国 C] 拼接平方数 题目描述 小明发现 49 49 49 很有趣&#xff0c;首先&#xff0c;它是个平方数。它可以拆分为 4 4 4 和 9 9 9&#xff0c;拆分出来的部分也是平方数。 169 169 169 也有…