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;
}
相关推荐
知识分享小能手18 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao20 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾21 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT21 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa21 小时前
HTML和CSS学习
前端·css·学习·html
看海天一色听风起雨落1 天前
Python学习之装饰器
开发语言·python·学习
speop1 天前
llm的一点学习笔记
笔记·学习
非凡ghost1 天前
FxSound:提升音频体验,让音乐更动听
前端·学习·音视频·生活·软件需求
ue星空1 天前
月2期学习笔记
学习·游戏·ue5
萧邀人1 天前
第二课、熟悉Cocos Creator 编辑器界面
学习