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

2024.11.28(作业)

思维导图

功能函数声明文件

#ifndef _FUN_H__
#define _FUN_H__
#include <myhead.h>

#define MAX 50 		//数组大小
#define QAZ 20      //长度和字符串大小

typedef int datatype; //数据元素类型

//2.1  定义顺序表类型
typedef struct
{
	datatype data[MAX];
	int len;
}SeqList,*SeqList_ptr;

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

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

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

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

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

//2.7  顺序表按任意位置进行插入操作
int list_insert_pos(SeqList_ptr S,int pos,datatype e);
 
//2.8  顺序表按位置进行删除
int list_delete_pos(SeqList_ptr S,int pos);

//2.9  顺序表按值查找
int list_search_value(SeqList_ptr S,datatype e);

//2.10 顺序表按位置查找返回元素值
int List_search_position(SeqList_ptr S,int pos);

//2.11 顺序表按位置进行修改元素
int list_update_position(SeqList_ptr S,int pos,datatype e);

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

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

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

//2.15 顺序表翻转
int list_flip(SeqList_ptr S);

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

//2.17 清空数组
int list_clear(SeqList_ptr S);

//2.18 销毁顺序表
int list_destroy(SeqList_ptr S);






#endif

功能函数

#include "fun.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;

	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 1;      //后续不能操作
    }

    //判断顺序表长度是否为最大长度
    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))
    {
        printf("查看失败\n");
        return ;
    }
    //遍历整个顺序表
    printf("当前顺序表中数据分别是:");
    for(int i=0; i<S->len; i++)
    {
        printf("%d\t", S->data[i]);
    }
    printf("\n");
}

//顺序表按任意位置进行插入操作
int list_insert_pos(SeqList_ptr S,int pos,datatype e)
{
	//判断逻辑
	 if(pos > S->len||pos<0)
	 {
	 	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");
}

//顺序表按位置进行删除
int list_delete_pos(SeqList_ptr S,int pos)
{
		//判断逻辑
	 if(list_empty(S)||pos > S->len||pos<0)
	 {
	 	printf("该位置不可删除\n");
		return -1;
	 }
	//删除逻辑
	for(int i=pos+1;i<S->len;i++)
	{
		S->data[i-1] = S->data[i];
	}

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

}

//顺序表按值查找
int list_search_value(SeqList_ptr S,datatype e)
{
	//判断逻辑
	if(list_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; 		//表示没找到
	//表长变化
}

//2.10 顺序表按位置查找返回元素值
int List_search_position(SeqList_ptr S,int pos)
{
	//判断逻辑
	if(pos<0||pos>S->len)
	{
		printf("查找失败\n");
		return -1;
	}
	//运行逻辑
		printf("查找成功\n");
	return S->data[pos];

}

//2.11 顺序表按位置进行修改元素
int list_update_position(SeqList_ptr S,int pos,datatype e)
{
	//判断逻辑
	if(list_empty(S)||pos<0||pos>S->len)
	{
		printf("修改失败\n");
		return -1;
	}
	//运行逻辑
	S->data[pos] = e;
	printf("修改成功\n");
	return 0;
}


//顺序表按值进行修改
int list_update_value(SeqList_ptr S,datatype old_e,datatype new_e)
{
	//判断逻辑
	//通过旧值查找旧值的位置
	//程序执行至此,res表示就是要修改的值的位置//顺序表按值进行修改
    //判断逻辑
    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;

}

//2.13 顺序表排序
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");

}

//顺序表去重操作
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++)
		{
			if(S->data[i] == S->data[j])
			{
			 	//说明有重复元素
				list_delete_pos(S,j);
				j--; 		//防止漏网之雨
			}
		}
	}
	printf("去重成功\n");
	return 0;
}

//2.15 顺序表翻转
int list_flip(SeqList_ptr S)
{
		//判断逻辑
	if(list_empty(S) || S->len == 1)
	{
		printf("翻转失败\n");
		return -1;
	}
	//翻转逻辑
	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");
	return 0;
}

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

//2.17 清空数组
int list_clear(SeqList_ptr S)
{
	bzero(S->data,sizeof(datatype)*MAX); 	//初始化数组
	S->len = 0;
	return -1;
}

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

主函数文件

#include "fun.h"
#include <myhead.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,7);
	list_add(S,2);
	list_add(S,5);

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

    //顺序表按任意位置进行插入操作
	list_insert_pos(S,2,89);
	list_show(S);

	
	//顺序表按位置进行删除
	list_delete_pos(S,2);
	list_show(S);

	//添加元素
	list_add(S,666);
	list_add(S,666);
	list_add(S,666);
	list_add(S,666);
	
	//去重
	list_unique(S);
	list_show(S);
	
	//排序
	list_sort(S);
	list_show(S);

	//翻转
	list_flip(S);
	list_show(S);
	
	//清空数组
	list_clear(S);

	//销毁
	list_destroy(S);

	return 0;
}


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

相关文章:

  • STM32C011开发(1)----开发板测试
  • MySQL 启动失败问题分析与解决方案:`mysqld.service failed to run ‘start-pre‘ task`
  • 导入100道注会cpa题的方法,导入试题,自己刷题
  • C++11(下)
  • 【Python爬虫五十个小案例】爬取豆瓣电影Top250
  • ViSTa:一个包含4000多个视频和逐步描述的层次化数据集,用于评估VLMs在不同复杂性任务中的表现。
  • BERT的中文问答系统42
  • 基于Springboot的网上商城系统【附源码】
  • P8723 [蓝桥杯 2020 省 AB3] 乘法表
  • 02-Linux系统权限维持
  • 力扣hot100-->排序
  • 23种设计模式-原型(Prototype)设计模式
  • 【自适应和反应式机器人控制】编程练习 1.1:计算最优轨迹 + 编程练习 1.3:基于三阶多项式的闭式时变轨迹发生器
  • Redis - ⭐常用命令
  • BC-Linux8.6设置静态IP
  • Ubuntu FTP服务器的权限设置
  • 设计模式---单例模式
  • 使用R语言绘制简单地图的教程
  • 【知识科普】Restful架构风格
  • 16 go语言(golang) - 并发编程select和workerpool
  • Kafka面试题(三)-- 内含面试重点
  • Navicat 预览变更sql
  • AI潮汐日报1128期:Sora泄露引发争议、百度早期研究对AI领域Scaling Law的贡献、Meta发布系列AI开源项目
  • 【linux014】文件操作命令篇 - head 命令
  • 镜舟科技积极参与北京市开源项目产融对接会,共谋开源新未来
  • HarmonyOS(60)性能优化之状态管理最佳实践