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

1128作业

思维导图

作业

main.c

#include <myhead.h>
#include"seqlist.h"
int main(int argc, const char *argv[])
{
	//定义一个顺序表指针,调用创建函数
	SeqList_ptr S = list_create();
	if(NULL==S)
	{
		return -1;
	}

	//顺序表后续操作
	//调用添加数据操作
	list_add(S,3);
	list_add(S,8);
	list_add(S,2);
	list_add(S,4);

	//调用遍历函数
	list_show(S);

	//调用任意位置插入函数
	list_insert_pos(S,2,520);
	list_show(S);

	list_insert_pos(S,2,1314);
	list_show(S);

	//调用删除函数
	//删除第一个元素
	//删除最后一个元素
	//删除任意一个元素
	list_delete_pos(S,0);
	list_show(S);
	list_delete_pos(S,S->len-1);
	list_show(S);
	list_delete_pos(S,2);
	list_show(S);

	//调用按值查找位置函数
	printf("该元素位置在:%d\n",list_search_value(S,1314));

	//调用按位置查找元素的值函数
	printf("该位置的元素的值为:%d\n",list_search_pos(S,2));

	//调用顺序表按位置进行修改
	list_update_pos(S,888,1);
	list_show(S);

	//调用按值进行修改函数
	list_update_value(S,888,10);
	list_show(S);

	//调用排序函数
	list_sort(S);
	list_show(S);

	//调用去重函数
	list_unique(S);
	list_show(S);

	//调用顺序表反转函数
	list_reverse(S);
	list_show(S);
	
	//调用输出顺序表长度函数
	printf("该顺序表的长度为:%d\n",list_long(S));

	//调用清空数组函数
	list_empty_all(S);
	list_show(S);

	//销毁顺序表
	list_destroy(S);
	list_show(S);

	return 0;
}

源文件

#include <myhead.h>
#include"seqlist.h"
//创建顺序表的定义
SeqList_ptr list_create()
{
	//在堆区申请一个顺序表
	SeqList_ptr S = (SeqList_ptr)malloc(sizeof(SeqList));
	if(NULL == S)
	{
		printf("顺序表创建失败\n");
		return NULL;
	}

	//程序执行至此,表示创建成功
	//给顺序表进行初始化
	bzero(S->data,sizeof(datatype)*MAX);  //初始化数组 
	S->len = 0;  //数据表长度为0
	printf("顺序表创建成功\n");
	return S;
}

//判断顺序表是否为空
int list_empty(SeqList_ptr S)
{
	//判断传入的顺序表是否合法
	if(NULL==S)
	{
		printf("非法顺序表\n");
		return 0;      //后续不能操作
	}
	
	//判断顺序表长度
	return 0==S->len?1:0;
}

//判断顺序表是否为满
int list_full(SeqList_ptr S)
{	
	//判断传入的顺序表是否合法
	if(NULL==S)
	{
		printf("非法顺序表\n");
		return 0;      //后续不能操作
	}
	
	//判断顺序表长度是否为最大长度
	return S->len==MAX?1:0;
}

//向顺序表中添加元素
int list_add(SeqList_ptr S,datatype e)
{
	//判断合法性
	if(list_full(S))
	{
		printf("顺序表已满,添加失败\n");
		return -1;
	}
	
	//添加逻辑
	S->data[S->len] = e;

	//表长变化
	S->len++;
	printf("添加成功\n");
	return 0;
	
}

//查看顺序表内容函数
void list_show(SeqList_ptr S)
{
	//判空
	if(list_empty(S) || NULL==S)
	{
		printf("查看失败\n");
		return ;
	}

	//遍历整个顺序表
	printf("当前循序表中的数据分别是:");
	for(int i=0;i<S->len;i++)
	{
		printf("%d\t",S->data[i]);
	}
	putchar(10);
}

//顺序表按任意位置进行插入操作
int list_insert_pos(SeqList_ptr S,int pos,datatype e)
{
	//判断逻辑
	if(pos<0 || pos>S->len || list_full(S))
	{
		printf("插入失败\n");
		return -1;
	}

	//腾空逻辑
	for(int i=S->len-1;i>=pos;i--)
	{
		S->data[i+1] = S->data[i];
	}

	//将数据放入顺序表
	S->data[pos] = e;

	//表长变化
	S->len++;
	printf("插入成功\n");
	return 0;
}

//顺序表按任意位置删除操作
int list_delete_pos(SeqList_ptr S,int pos)
{
	//判断逻辑
	if(list_full(S) || pos<0 || pos>=S->len)
	{
		printf("删除失败\n");
		return -1;
	}

	//删除逻辑
	for(int i=pos+1;i<S->len;i++)
	{
		S->data[i-1] = S->data[i];
	}

	//表长变化
	S->len--;
	printf("删除成功\n");
	return 0;
}

//顺序表按值查找返回位置
int list_search_value(SeqList_ptr S,datatype e)
{
	//判断逻辑
	if(list_full(S))
	{
		printf("查找失败\n");
		return -1;
	}

	//处理逻辑
	for(int i=0;i<S->len;i++)
	{
		//判断是否跟任意一个元素相等
		if(S->data[i]==e)
		{
			return i;
		}
	}
	printf("查找失败\n");
	return -1;   //表示没找到
}

//顺序表按位置查找元素的值
int list_search_pos(SeqList_ptr S,int pos)
{
	//判断逻辑
	if(list_full(S))
	{
		printf("查找失败\n");
		return -1;
	}

	//处理逻辑
	printf("查找成功\n");
	return S->data[pos];
}

//顺序表按位置进行修改
int list_update_pos(SeqList_ptr S,datatype new_e,int pos)
{
	//判断逻辑
	if(list_empty(S))
	{
		printf("修改失败\n");
		return -1;
	}

	//通过位置查找元素进行替换
	S->data[pos] = new_e;
	printf("更新成功\n");
	return 0;
}

//顺序表按值进行修改
int list_update_value(SeqList_ptr S,datatype old_e,datatype new_e)
{
	//判断逻辑
	if(list_empty(S))
	{
		printf("修改失败\n");
		return -1;
	}

	//通过旧值查找旧值的位置
	int res = list_search_value(S,old_e);
	if(res==-1)
	{
		printf("更新失败\n");
		return -1;
	}

	//程序执行至此,res表示的就是要修改的值的下标
	S->data[res] = new_e;
	printf("更新成功\n");
	return 0;
}

//顺序表排序
int list_sort(SeqList_ptr S)
{
	//判断逻辑
	if(list_empty(S))
	{
		printf("排序失败\n");
		return -1;
	}

	//排序逻辑
	for(int i=1;i<S->len;i++)
	{
		for(int j=0;j<S->len-i;j++)
		{
			if(S->data[j]>S->data[j+1])
			{
				datatype temp = S->data[j];
				S->data[j] = S->data[j+1];
				S->data[j+1] = temp;
			}
		}
	}
	printf("排序成功\n");
	return 0;

}

//顺序表去重操作
int list_unique(SeqList_ptr S)
{
	//判断逻辑
	if(list_empty(S) || S->len==1)
	{
		printf("去重失败\n");
		return -1;
	}

	//去重逻辑
	for(int i=0;i<S->len;i++)//遍历所有元素
	{
		//找到任意一个元素 S->data[i]
		for(int j=i+1;j<S->len;j++) //遍历 S->data[i]后的元素
		{
			if(S->data[i] == S->data[j])
			{
				//说明有重复元素
				list_delete_pos(S,j);//按位置删除下标j的元素
				j--;  //防止连续重复数据导致的漏删
			}
		}
	}
	printf("去重成功\n");
	return 0;
}

//顺序表反转
void list_reverse(SeqList_ptr S)
{
	//判断逻辑
	if(list_empty(S))
	{
		printf("反转失败\n");
		return ;
	}

	//反转逻辑
	for(int i=0;i<S->len/2;i++)
	{
		datatype temp = S->data[i];
		S->data[i] = S->data[S->len-1-i];
		S->data[S->len-1-i] = temp;
	}
	printf("反转成功\n");
}

//获取顺序表的长度
int list_long(SeqList_ptr S)
{
	return S->len;
}

//清空数组
int list_empty_all(SeqList_ptr S)
{
	memset(S->data,0,sizeof(datatype));
	S->len = 0;
	printf("已经清空\n");

}

//顺序表销毁
void list_destroy(SeqList_ptr S)
{
	if(NULL!=S)
	{
		//销毁顺序表
		free(S);
		S = NULL;
	}
	printf("销毁成功\n");

}

头文件

#ifndef __SEQLIST_H__
#define __SEQLIST_H__

#define MAX 100 //宏定义顺序表最大长度
typedef int datatype;  //数据元素类型

//定义顺序表类型
typedef struct
{
	datatype data[MAX];  //存储数据表的数组容器
	int len;//存储顺序表的长度
}SeqList,*SeqList_ptr;

//创建顺序表
SeqList_ptr list_create();

//判断顺序表是否为空
int list_empty(SeqList_ptr S);

//判断顺序表是否为满
int list_full(SeqList_ptr S);

//向顺序表中添加元素
int list_add(SeqList_ptr S,datatype e);

//查看顺序表内容函数
void list_show(SeqList_ptr S);

//顺序表按任意位置插入操作
int list_insert_pos(SeqList_ptr S,int pos,datatype e);

//顺序表按任意位置删除操作
int list_delete_pos(SeqList_ptr S,int pos);

//顺序表按值查找返回位置
int list_search_value(SeqList_ptr S,datatype e);

//顺序表按位置查找元素的值
int list_search_pos(SeqList_ptr S,datatype e);

//顺序表按位置进行修改
int list_update_pos(SeqList_ptr S,datatype new_e,int pos);

//顺序表按值进行修改
int list_update_value(SeqList_ptr S,datatype old_e,datatype new_e);

//顺序表排序
int list_sort(SeqList_ptr S);

//顺序表去重操作
int list_unique(SeqList_ptr S);

//顺序表反转
void list_reverse(SeqList_ptr S);

//获取顺序表的长度
int list_long(SeqList_ptr S);

//清空数组
int list_empty_all(SeqList_ptr S);

//顺序表销毁
void list_destroy(SeqList_ptr S);
#endif


http://www.kler.cn/a/420496.html

相关文章:

  • 自然语言处理:基于BERT预训练模型的中文命名实体识别(使用PyTorch)
  • SpringBoot集成Kafka和avro和Schema注册表
  • 【机器学习】分类任务: 二分类与多分类
  • 用三维模型的顶点法向量计算法线贴图
  • 基于Java Springboot宠物咖微信小程序
  • BA是什么?
  • Debezium Engine监听binlog实现缓存更新与业务解耦
  • redhat 7.9配置阿里云yum源
  • Android 原生解析 Json 字符串
  • 《Vue零基础入门教程》第十五课:样式绑定
  • 黑马程序员MybatisPlus/Docker相关内容
  • MFC工控项目实例三十四模拟量实时监控数字显示效果
  • Git Bash + VS Code + Windows11 Git命令报错莫名奇妙的问题
  • 数据库(学习笔记)
  • YOLOv11 NCNN安卓部署
  • 【CVPR24】OmniMedVQA: 一种新的医疗LVLM大规模综合评估基准
  • 【笔记】文明、现代化与价值投资
  • 【C++boost::asio网络编程】有关异步读写api的笔记
  • 再谈Java中的String类型是否相同的判断方法
  • ESP32-S3模组上跑通ES8388(11)
  • git bash 一双击选中内容就^C (ctrl C)
  • 安全关系型数据库查询新选择:Rust 语言的 rust-query 库深度解析
  • Github提交Pull Request教程 Git基础扫盲(零基础易懂)
  • 贪心算法题
  • ipmitool使用详解(三)-解决各种dell、hp服务器无法ipmitool连接问题
  • 时频转换 | Matlab基于递归图Reccurence Plots一维数据转二维图像方法