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

server/2024/12/17 14:27:12/

 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;}//判断顺序表长度是否为0return 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博客


http://www.ppmy.cn/server/150921.html

相关文章

Bulk多组学多时间点做时序分析

具体做法如下&#xff1a; 假设我们有5个样本点&#xff08;A, B, C, D, E&#xff09;的1000个基因表达量的数据&#xff0c;我们希望对这1000个基因进行所谓的“拟时序”分析&#xff0c;以获得这1000个基因表达的先后顺序。 Step1&#xff1a;对5个样本点进行PCA分析&…

js面试题|[2024-12-10]

1.延迟加载JS有哪些方式&#xff1f; 延迟加载&#xff1a;async、defer 例如&#xff1a;<script defer type"text/javascript" srcscript.js></script> defer&#xff1a;等html全部解析完毕&#xff0c;才会执行js代码&#xff0c;顺次执行js脚本 asy…

【经验分享】搭建本地训练环境知识点及方法

最近忙于备考没关注&#xff0c;有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源&#xff0c;但我以交流、交换为主&#xff0c;笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟&#xff0c;为了避免更多人花没必要的钱&#xff0c;所以决定公…

Java+FreeSWITCH 开源呼叫系统详解

JavaFreeSWITCH 开源呼叫系统详解 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 引言 随着通信技术的不断发展&#xff0c;企业对于高效、灵活且成本效益高的呼叫解决方案的需求日益增长。JavaFreeSWITCH 开…

机器学习中的 Transformer 简介(第 1 部分)

目录 一、说明 二、为什么是 Transformer&#xff1f; 三、什么是 Transformer&#xff1f; 3.1 译者的类比 四、编码器部分 4.1 、从文本输入到输入嵌入 4.2 词嵌入 4.2 N倍编码器段 4.4 多头注意力机制 4.5 添加残差和层归一化 4.6 添加残差和层归一化 五、总结 一、说明 西如…

基于springboot+vue的高校校园交友交流平台设计和实现

文章目录 系统功能部分实现截图 前台模块实现管理员模块实现 项目相关文件架构设计 MVC的设计模式基于B/S的架构技术栈 具体功能模块设计系统需求分析 可行性分析 系统测试为什么我&#xff1f; 关于我项目开发案例我自己的网站 源码获取&#xff1a; 系统功能 校园交友平台…

基于Go和Python的高效Web开发实战解析

基于Go和Python的高效Web开发实战解析 文章导读 本文将深入探讨基于Go和Python的高效Web开发实战解析的技术实践和创新方法。 技术博客文章&#xff1a;基于Go和Python的高效Web开发实战解析 引言 在当今这个数字化时代&#xff0c;选择合适的编程语言对于构建高效的Web应…

外观模式(Facade Pattern):为子系统提供统一的接口

目录 1. 什么是外观模式2. 为什么需要外观模式3. 外观模式的结构4. 实现示例5. 实际应用案例6. 最佳实践与注意事项 1. 什么是外观模式 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了一个统一的接口&#xff0c;用来访问子系统中…