第二章:顺序表(一)

devtools/2024/11/30 2:16:26/

作业:

1> 思维导图

2> 将没有完成的功能,全部完成

3> 将顺序表的源代码重新写一遍,可以参照着头文件写,测试文件自己写

头文件

/*******************************************************/
//=> File Name: seqlist.h
//=> Author: Water
//=> Mail: 1249496568@qq.com 
//=> Created Time: 2024年11月27日 星期三 15时06分59秒
/*******************************************************/#ifndef SEQLIST_H
#define SEQLIST_H#define MAX 100
typedef int datatype;//定义顺序表类型
typedef struct Seqlist
{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_del_pos(Seqlist_ptr S,int pos);
//顺序表按值查找返回元素下标
int list_search_value(Seqlist_ptr S,datatype e);
//顺序表按位置查找返回值
int list_search_pos(Seqlist_ptr S,int pos);
//顺序表按位置修改元素
int list_update_pos(Seqlist_ptr S,int pos,datatype new_e);
//顺序表按值修改值
int list_update_value(Seqlist_ptr S,datatype ole_e,datatype new_e);
//顺序表排序
int list_sort(Seqlist_ptr S);
//顺序表去重
int list_unique(Seqlist_ptr S);
//顺序表翻转
int list_reverse(Seqlist_ptr S);
//获取顺序表长度
int list_len(Seqlist_ptr S);
//清空数组
int list_clear(Seqlist_ptr S);
//销毁顺序表
void list_destory(Seqlist_ptr S);
#endif

源文件

/*******************************************************/
//=> File Name: seqlist.c
//=> Author: Water
//=> Mail: 1249496568@qq.com 
//=> Created Time: 2024年11月27日 星期三 15时06分59秒
/*******************************************************/#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;printf("顺序表创建成功\n");return S;
}//判断顺序表是否为空
int list_empty(Seqlist_ptr S)
{//判断传入的顺序表是否合法if(NULL == S){printf("非法顺序表\n");return 0;}//判断顺序表长度return 0 == S->len;
}//判断顺序表是否为满
int list_full(Seqlist_ptr S)
{//判断传入的顺序表是否合法if(NULL == S){printf("非法顺序表\n");return 1;}//判断顺序表长度是否为最大长度return MAX == S->len;
}
//向顺序表中添加元素
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) || S == NULL){printf("顺序表为空,查看失败\n");return;}//遍历整个顺序表printf("顺序表中各元素分别为:\n");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(list_full(S) || pos < 0 || pos > S->len){printf("插入失败\n");return -1;}S->len++;for(int i=S->len-1;i>=pos;i--){S->data[i+1] = S->data[i];}S->data[pos] = e;printf("插入成功\n");return 0;
}
//向顺序表中任意位置删除元素
int list_del_pos(Seqlist_ptr S,int pos)
{//判空,判断位置是否合法if(list_empty(S) || pos <0 || pos > S->len){printf("删除失败\n");return -1;}for(int i=pos;i<S->len-1;i++){S->data[i] = S->data[i+1];}S->len--;printf("删除成功\n");return 0;
}
//顺序表按值查找返回元素下标
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;
}
//顺序表按位置查找返回值
int list_search_pos(Seqlist_ptr S,int pos)
{//判空if(list_empty(S)){printf("顺序表为空,查找失败\n");return -1;}for(int i=0;i<S->len;i++){if(i == pos){return S->data[i];}}printf("查找失败\n");return -1;
}
//顺序表按位置修改元素
int list_update_pos(Seqlist_ptr S,int pos,datatype new_e)
{//判空if(list_empty(S)){printf("顺序表为空,修改失败\n");return -1;}int res = list_search_pos(S,pos);if(res == -1){printf("更新失败\n");}S->data[res] = new_e;printf("修改成功\n");return 0;
}
//顺序表按值修改值
int list_update_value(Seqlist_ptr S,datatype ole_e,datatype new_e)
{//判空if(list_empty(S)){printf("顺序表为空,修改失败\n");return -1;}int res = list_search_value(S,ole_e);if(res == -1){printf("更新失败\n");}S->data[res] = new_e;printf("修改成功\n");return 0;
}
//顺序表排序
int list_sort(Seqlist_ptr S)
{//判空if(list_empty(S) || S->len == 1){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]){int 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++){for(int j=i+1;j<S->len;j++){if(S->data[i] == S->data[j]){list_del_pos(S,j);j--;}}}printf("去重成功\n");return 0;
}
//顺序表翻转
int list_reverse(Seqlist_ptr S)
{//判空if(list_empty(S) || S->len == 1){printf("翻转失败\n");return -1;}for(int i=0;i<S->len/2;i++){int temp = S->data[i];S->data[i] = S->data[S->len-1-i];S->data[S->len-1-i] = temp;}printf("翻转成功\n");return 0;
}
//获取顺序表长度
int list_len(Seqlist_ptr S)
{printf("顺序表的长度为:%d\n",S->len);return S->len;
}
//清空数组
int list_clear(Seqlist_ptr S)
{S->len = 0;printf("顺序表清空成功\n");return 0;
}
//销毁顺序表
void list_destory(Seqlist_ptr S)
{if(NULL != S){free(S);S = NULL;}printf("顺序表销毁成功\n");
}

测试主函数

/*******************************************************/
//=> File Name: main.c
//=> Author: Water
//=> Mail: 1249496568@qq.com 
//=> Created Time: 2024年11月27日 星期三 15时06分59秒
/*******************************************************/#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,1,520);list_show(S);list_insert_pos(S,1,1314);list_show(S);list_del_pos(S,1);list_show(S);list_del_pos(S,2);list_show(S);list_add(S,3);list_add(S,8);list_add(S,2);list_add(S,4);list_show(S);list_update_value(S,520,1314);list_show(S);list_add(S,3);list_add(S,8);list_add(S,2);list_add(S,4);list_show(S);list_sort(S);list_show(S);	list_reverse(S);list_show(S);list_len(S);list_unique(S);list_show(S);list_clear(S);list_show(S);list_destory(S);list_show(S);return 0;
}


http://www.ppmy.cn/devtools/138072.html

相关文章

linux安全管理-会话安全

文章目录 1 设置命令行界面超时退出2 配置终端登录失败策略3 配置 SSH 登录失败策略 1 设置命令行界面超时退出 1、检查内容 检查操作系统是否设置命令行界面超时退出。 2、配置要求 操作系统设置命令行界面超时退出。 3、配置方法 配置命令行界面超时时间&#xff0c;编辑/et…

Android NDK开发 JNI 基础

在android 系统开发中 ndk开发是很重要的内容。ndk开发中 jni 是基础。 目录 一&#xff0e;什么是JNI 二. 如何使用JNI 1.Java 代码如何调用 c/c 代码 2. c/c如何调用 java 函数 一&#xff0e;什么是JNI JNI——Java Native Interface&#xff0c;它是Java平台的一个特…

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; }S…

HTTPS的安全性优势

随着互联网的深入发展&#xff0c;网络安全问题日益凸显&#xff0c;尤其是数据传输过程中的安全性问题。HTTPS作为一种安全的超文本传输协议&#xff0c;为在线数据传输提供了强有力的保障。本文将深入探讨HTTPS的安全性优势&#xff0c;以及它是如何保护我们的在线数据传输的…

嵌入式MCU常见问题分类汇总

目录 1.系统 1.1 什么是BSP 嵌入式BSP介绍-CSDN博客 2.数据 2.1 串口数据处理&#xff08;字符转换为十进制数值&#xff09; 关于串口数据处理&#xff08;字符转换为十进制数值&#xff09;-CSDN博客 3.文件 3.1 hex转bin方法 hex转bin方法_lua hex转为bin-CSDN博客

人工智能之数学基础:向量的基本知识

本文重点 向量的基本性质是线性代数和向量空间理论的核心,它们为向量运算提供了坚实的基础,并在物理、工程、计算机图形学等领域有着广泛的应用。本文对向量的一些基本知识进行介绍,帮助大家快速理解向量。 向量的定义与表示 向量是一个既有大小又有方向的量,通常用带箭…

【Kubernetes 集群核心概念:Pod】pod生命周期介绍【五】

5.1 Pod生命周期 Pod的生命周期指的是从Pod创建到终止的整个过程。它分为以下两种常见情况&#xff1a; 长期运行Pod&#xff1a; 例如运行HTTP服务的Pod&#xff0c;它在正常情况下会一直运行&#xff0c;但可以手动删除或终止。短期运行Pod&#xff1a; 例如执行计算任务的…

微信小程序首页搜索框的实现教程

微信小程序首页搜索框的实现教程 前言 在现代移动应用中,搜索功能是用户获取信息的主要方式之一。对于购物小程序而言,提供一个美观且高效的搜索框,可以显著提升用户体验,帮助用户快速找到他们想要的商品。本文将详细介绍如何在微信小程序中实现一个样式优美的搜索框,包…