2024.11.28(作业)

server/2024/11/29 22:18:03/

思维导图

功能函数声明文件

#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.ppmy.cn/server/146005.html

相关文章

【Linux】Linux进程控制

【Linux】Linux进程控制 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;Linux&#x1f34a; &#x1f33c;文章目录&#x1f33c; 1. 进程创建 1.1 初始 fork 函数 1.2 写时拷贝 2. 进程终止 2.1 进程退出场景 2.2 进程常见退出方法…

3.10 内核 BUG_ON() at xfs_vm_writepage() -> page_buffers()

目录 前言 问题分析 page buffers创建 page buffers丢失 Write-Protect Dirty Page w/o Buffers 问题解决 前言 这个问题发生在3.10.0-514.el7上&#xff0c;并且在RHEL的知识库中快速找到了对应的案例以及解决方案&#xff0c;但是&#xff0c;理解问题如何发生和解决…

用于自然语言处理的循环神经网络RNN

前一篇&#xff1a;《人工智能模型学习到的知识是怎样的一种存在&#xff1f;》 序言&#xff1a;在人工智能领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;备受瞩目&#xff0c;但神经网络的种类远不止于此。实际上&#xff0c;不同类型的神经网络各有其独特的应用…

【青牛科技】D2761音频限幅器,适合在个人电脑、便携式音响等系统中作音频限幅用。

概述&#xff1a; D2761是为保护扬声器所设计的音频限幅器&#xff0c;其限幅值可通过外接电阻来调节&#xff0c;适合在个人电脑、便携式音响等系统中作音频限幅用。D2761采用SSOP10、MSOP10、TSSOP14的封装形式封装。 主要特点&#xff1a;  工作电压范围宽&#xff1a;2.…

uniapp开发支付宝小程序自定义tabbar样式异常

解决方案&#xff1a; 这个问题应该是支付宝基础库的问题&#xff0c;除了依赖于官方更新之外&#xff0c;开发者可以利用《自定义 tabBar》曲线救国 也就是创建一个空内容的自定义tabBar&#xff0c;这样即使 tabBar 被渲染出来&#xff0c;但从视觉上也不会有问题 1.官方文…

QT 实现组织树状图

1.实现效果 在Qt中使用QGraphicsItem和QGraphicsScene实现树状图,你需要创建自定义的QGraphicsItem类来表示树的节点,并管理它们的位置和连接,以下是实现效果图。 2.实现思路 可以看见,上图所示,我们需要自定义连线类和节点类。 每个节点类Node,需要绘制矩形框体文字…

选择使用whisper.cpp进行语音转文字

需要将一些wav格式的语音文件转成文字&#xff08;ASR&#xff0c;STT&#xff09;&#xff0c;接到这个任务后&#xff0c;首先上网搜索有没有现成免费的工具或服务可以使用。常用的关键字如“语音转文字 免费 在线”。 搜到的很多野鸡网站&#xff0c;都可以免注册免费提供短…

牛客题库 21738 牛牛与数组

牛牛与数组题目链接 题目大意 牛牛喜欢这样的数组: 1:长度为n 2:每一个数都在1到k之间 3:对于任意连续的两个数A,B,A<=B 与(A % B != 0) 两个条件至少成立一个请问一共有多少满足条件的数组,对 1 e 9 + 7 1e^9+7 1e9+7 取模 输入格式 输入两个整数 n , k n,k n,…