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

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

2.顺序表其他操作

3.功能函数封装

4 完整代码

1>头文件test.h

cpp 复制代码
#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

cpp 复制代码
#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

cpp 复制代码
#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博客

相关推荐
kiramario13 分钟前
【结束】JS如何不通过input的onInputFileChange使用本地mp4文件并播放,nextjs下放入public文件的视频用video标签无法打开
开发语言·javascript·音视频
土豆儿@44 分钟前
java之泛型
java·开发语言
m0_748245341 小时前
python——Django 框架
开发语言·python·django
醉城夜风~1 小时前
[数据结构]双链表详解
数据结构
曼巴UE51 小时前
UE5.3 C++ TArray系列(一)
开发语言·c++·ue5
熬夜苦读学习1 小时前
Linux文件系统
linux·运维·服务器·开发语言·后端
菜鸟一枚在这2 小时前
深度解析建造者模式:复杂对象构建的优雅之道
java·开发语言·算法
gyeolhada2 小时前
2025蓝桥杯JAVA编程题练习Day5
java·数据结构·算法·蓝桥杯
阿巴~阿巴~2 小时前
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
开发语言·数据结构·c++·算法·宽度优先
waicsdn_haha3 小时前
Visual Studio Code 2025 安装与高效配置教程
c语言·ide·windows·vscode·微软·编辑器·win7