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;
}
相关推荐
西岸行者8 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意8 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码8 天前
嵌入式学习路线
学习
毛小茛8 天前
计算机系统概论——校验码
学习
babe小鑫8 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms9 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下9 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。9 天前
2026.2.25监控学习
学习
im_AMBER9 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J9 天前
从“Hello World“ 开始 C++
c语言·c++·学习