数据结构--顺序表、单链表
线性表是指顺序表和单链表
//顺序表数据结构
typedef struct
{
ElemType data[MaxSize];//顺序表元素
int length; //顺序表当前长度
}SqList;
//单链表结点数据结构
typedef struct LNode
{
ElemType data;//数据域
struct LNode *next;//指针域
}LNode,*LinkList;
顺序表
#define MaxSize 100
typedef struct { int data [MaxSize]; int length; }SqList;//*********************************** 基本操作函数 *******************************************int InitList(SqList &L)
{memset(L.data, 0, sizeof(L));L.length = 0;return 0;}
bool CreateList(SqList& L, int n)
{if (n<0 || n>MaxSize)false;for (int i = 0; i < n; i++){scanf("%d", &L.data[i]);L.length++;}return true;
}bool InsertList(SqList& L, int i, int e)
{if (i<1 || i>L.length + 1) //判断位置是否有效{printf("位置无效!!!\n");return false;}if (L.length >= MaxSize)//判断存储空间是否已满{printf("当前存储空间已满!!!\n");return false;}for (int j = L.length; j >= i; j--){L.data[j] = L.data[j - 1]; // 第i个元素开始后移}L.data[i - 1] = e;L.length++;return true;
}bool ListDelete(SqList& L, int i)
{if (i<1 || i>L.length){printf("位置无效!!!\n");return false;}for (int j = i; j <= L.length - 1; j++)//位置i之后元素依次前移覆盖{L.data[j - 1] = L.data[j];}L.length--;return true;
}//查找函数 按位置从小到大查找第一个值等于e的元素 并返回位置
int LocateElem(SqList L, int e)
{for (int i = 0; i < L.length; i++)//从低位置查找{if (L.data[i] == e)return i + 1;}return 0;
}void Reverse(SqList& L)
{if (L.length)for (int i = 0; i < L.length - 1 - i; i++){int t = L.data[i];L.data[i] = L.data[L.length - 1 - i];L.data[L.length - 1 - i] = t;}
}//清空顺序表
void ClearList(SqList& L) {L.length = 0;
}//奇偶分开并排序
void SplitSort(SqList& L)
{int Even = 0;int Odd = L.length - 1;int i = 0;int j = L.length - 1;bool flag = false; // 交换标志if (L.length)for (; i < j; i++, j--){while (L.data[i] % 2 != 0 && i < L.length - 1)i++;while (L.data[j] % 2 == 0 && j > 0)j--;if (L.data[i] % 2 == 0 && L.data[j] % 2 != 0 && i < j){int temp = L.data[i];L.data[i] = L.data[j];L.data[j] = temp;flag = true;}if (!flag) //没有交换{if (i > j) { // 恰好奇偶分开Even = j;Odd = i;}else {Even = L.length - 1;//全奇数Odd = 0; //全偶数}}}if (flag)//有交换{for (int i = 0; i < L.length; i++)if (L.data[i] % 2 == 0){Odd = i;Even = i - 1;break;}}sort(L.data, L.data + Even + 1); // include<list>sort(L.data + Odd, L.data + L.length);
}//********************************功能实现函数**************************************//void PrintList(SqList L)
{printf("当前顺序表所有元素:");for (int i = 0; i < L.length; i++){printf("%d ", L.data[i]);}printf("\n");
}void Create(SqList& L)
{int n; bool flag;L.length = 0;printf("请输入要创建的顺序表长度(>1):");scanf("%d", &n);printf("请输入%d个数(空格隔开):", n);flag = CreateList(L, n);if (flag) {printf("创建成功!\n");PrintList(L);}else printf("输入长度非法!\n");}void Insert(SqList& L)
{int place; int e; bool flag;printf("请输入要插入的位置(从1开始)及元素:\n");scanf("%d%d", &place, &e);flag = InsertList(L, place, e);if (flag){printf("插入成功!!!\n");PrintList(L);}
}void Delete(SqList& L)
{int place; bool flag;printf("请输入要删除的位置(从1开始):\n");scanf("%d", &place);flag = ListDelete(L, place);if (flag){printf("删除成功!!!\n");PrintList(L);}
}void Search(SqList L)
{int e; int flag;printf("请输入要查找的值:\n");scanf("%d", &e);flag = LocateElem(L, e);if (flag){printf("该元素位置为:%d\n", flag);}elseprintf("未找到该元素!\n");
}void menu() {printf("********1.创建 2.插入*********\n");printf("********3.删除 4.查找*********\n");printf("********5.倒置 6.分奇偶排序***\n");printf("********7.输出 8.清空*********\n");printf("********9.退出 *********\n");
}int main() {SqList L;int choice = 0;;InitList(L);//switch (choice)//{//case 1:Create(L); break;//case 2:Insert(L); break;//case 3:Delete(L); break;//case 4:Search(L); break;//case 5:Reverse(L); break;//case 6:SplitSort(L); break;//case 7:PrintList(L); break;//case 8:ClearList(L); break;//default:printf("输入错误!!!\n");//}while (1){menu();printf("请输入菜单序号:\n");scanf("%d", &choice);if (9 == choice) break;switch (choice){case 1:Create(L); break;case 2:Insert(L); break;case 3:Delete(L); break;case 4:Search(L); break;case 5:Reverse(L); break;case 6:SplitSort(L); break;case 7:PrintList(L); break;case 8:ClearList(L); break;default:printf("输入错误!!!\n");}system("pause");system("cls");}return 0;
}
单链表
#define MaxSize 100
typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList;//*********************************** 基本操作函数 *******************************************int InitList(LinkList &L)
{L = new LNode;L->next = NULL;return 0;}
//获取单链表长度 头结点无数据,不算
int ListLength(LinkList L)
{LinkList p = L; int sum = 0;while (p){sum++;p = p->next;}return sum - 1;//去除头结点
}//插入函数--后插法 插入到第i(1<=i<=length+1)个位置 即i-1之后 不必区分i的位置
bool ListInsert(LinkList& L, int i, int e)
{LNode* s; LinkList p = L; int j = 0;while (p && (j < i - 1))//j指到i-1位置或者p已经到最后时跳出{p = p->next;++j;}if (!p || j > i - 1)//i<1或者i>ListLength(L)+1时,插入位置无效 不调用ListLength,提高效率{printf("插入位置无效!!!\n");return false;}s = new LNode;s->data = e;s->next = p->next;p->next = s;return true;
}bool ListDelete(LinkList& L, int i)
{LNode* s; LinkList p = L; int j = 0;LinkList q;while (p && (j < i - 1))//j指到i-1位置{p = p->next;++j;}if (p == nullptr || !(p->next) || j > i - 1)//i<1或者i>ListLength(L)时,删除位置无效{printf("删除位置无效!!!\n");return false;}q = p->next;p->next = q->next;free(q);//释放空间return true;
}LNode* LocateElem(LinkList L, int e)
{LNode* p = L;while (p && (p->data != e)){p = p->next;}return p;
}//********************************功能实现函数**************************************////遍历输出函数
void PrintList(LinkList L)
{LinkList p = L->next; //跳过头结点if (ListLength(L)){printf("当前单链表所有元素:");while (p){printf("%d ", p->data);p = p->next;}printf("\n");}else{printf("当前单链表已空!\n");}
}void Insert(LinkList& L)
{int place; int e; bool flag;printf("请输入要插入的位置(从1开始)及元素:\n");scanf("%d%d", &place, &e);flag = ListInsert(L, place, e);if (flag){printf("插入成功!!!\n");PrintList(L);}
}void Delete(LinkList L)
{int place; bool flag;printf("请输入要删除的位置(从1开始):\n");scanf("%d", &place);flag = ListDelete(L, place);if (flag){printf("删除成功!!!\n");PrintList(L);}
}void Search(LinkList L)
{int e; LNode* q;printf("请输入要查找的值:\n");scanf("%d", &e);q = LocateElem(L, e);if (q){printf("找到该元素!\n");}elseprintf("未找到该元素!\n");
}void menu() {printf("********1.后插 2.删除*********\n");printf("********3.查找 4.输出*********\n");printf("********5.退出 *********\n");
}int main() {LinkList L;int choice = 0;;InitList(L);while (1){menu();printf("请输入菜单序号:\n");scanf("%d", &choice);if (9 == choice) break;switch (choice){case 1:Insert(L); break;case 2:Delete(L); break;case 3:Search(L); break;case 4:PrintList(L); break;default:printf("输入错误!!!\n");}system("pause");system("cls");}return 0;
}
相关文章:
数据结构--顺序表、单链表
线性表是指顺序表和单链表 //顺序表数据结构 typedef struct { ElemType data[MaxSize];//顺序表元素 int length; //顺序表当前长度 }SqList; //单链表结点数据结构 typedef struct LNode { ElemType data;//数据域 struct LNode *next;//指针域 }LNode,*LinkList; 顺序表 …...
云安全攻防(一)之 云原生
前言 随着公有云和私有云的广泛部署,云计算基础设施成为企业部署新业务的首选。可以说,云计算已进入下半场,各大云计算服务商的厮杀日益激烈,新的概念也不断的层出不穷。近年来,云原生安全(Cloud Native C…...
#vue3报错 Cannot read properties of null (reading ‘isCE‘)#
场景:使用 npm 安装依赖包的时候,如如安装 npm i xlsx npm i file-saver 重新运行报错 Cannot read properties of null (reading isCE)# 解决办法: 使用的vite vue 在vite.config.ts添加如下配置: dedupe: [ vue ]...
【计算机视觉中的 GAN 】 - 生成学习简介(1)
一、说明 在阅读本文之前,强烈建议先阅读预备知识,否则缺乏必要的推理基础。本文是相同理论GAN原理的具体化范例,阅读后有两个好处:1 巩固了已经建立的GAN基本概念 2 对具体应用的过程和套路进行常识学习,这种练习题一…...
深度学习实战44-Keras框架下实现高中数学题目的智能分类功能应用
大家好,我是微学AI ,今天给大家介绍一下深度学习实战44-Keras框架实现高中数学题目的智能分类功能应用,该功能是基于人工智能技术的创新应用,通过对数学题目进行智能分类,提供个性化的学习辅助和教学支持。该功能的实现可以通过以下步骤:首先,采集大量的高中数学题目数据…...
Redis Sentinel 及 Redis Cluster
Redis Sentinel Redis-Sentinel(哨兵模式)是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是…...
shell中按照特定字符分割字符串,并且在切分后的每段内容后加上特定字符(串),然后再用特定字符拼接起来
文件中的内容,可以这么写: awk -F, -v OFS, {for(i1;i<NF;i){$i$i"_suffix"}}1 input.txt-F,:设置输入字段分隔符为逗号(,),这将使awk按照逗号分割输入文本。-v OFS‘,’:设置输…...
探寻智能化未来:AI与Web3共创金融领域巨大潜力
人工智能(AI)和Web3技术的迅猛发展为我们带来了许多新的机遇和影响。在数字经济和社会的浪潮中,结合了AI的智能化能力和Web3的去中心化与区块链技术,我们将进入一个智能化的Web3时代。人工智能和Web3技术是开拓生产力极限和重新定…...
Django学习笔记-表单(forms)的使用
在Django中提供了了form表单,可以更为简单的创建表单模板信息,简化html的表单。 一、网页应用程序中表单的应用 表单通常用来作为提交数据时候使用。 1.1 创建表单模板文件夹 在项目文件夹下创建一个template文件夹,用于存储所有的html模…...
机器学习分布式框架ray运行TensorFlow实例
使用Ray来实现TensorFlow的训练是一种并行化和分布式的方法,它可以有效地加速大规模数据集上的深度学习模型的训练过程。Ray是一个高性能、分布式计算框架,可以在集群上进行任务并行化和数据并行化,从而提高训练速度和可扩展性。 以下是实现…...
QT【day4】
chat_QT服务器端: //.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器类 #include<QTcpSocket> //客户端类 #include<QMessageBox> //对话框类 #include<QList> //链表容器 #inc…...
java中方法相关知识点详解
方法 简介 方法是一段用来完成特定功能的代码片段,用于定义该类或该类的实例的行为特征和功能实现语句块【复合语句】 语句块中定义的变量只能用于自己,外部不能使用 语句块可以使用外部的变量,而外部不能使用语句块的变量语法 [修饰符1 修饰…...
【算法训练营】Fibonacci数列+合法括号序列判断+两种排序方法
7.29 Fibonacci数列题目解析代码 合法括号序列判断题目题解代码 两种排序方法题目:题解代码 Fibonacci数列 题目 题目链接: 点击跳转 解析 【题目解析】: 本题是对于Fibonacci数列的一个考察,Fibonacci数列的性质是第一项和第二项都为1&am…...
【Rasa】入门案例学习
Rasa初体验--构建对话机器人 NLU数据 version: "3.1"nlu:- intent: greetexamples: |- Hi- Hey!- Hello- Good day- Good morning- intent: subscribeexamples: |- I want to get the newsletter- Can you send me the newsletter?- Can you sign me up for the ne…...
基于java的坦克大战游戏的设计与实现--开题报告--【毕业论文】
文章目录 本系列校训毕设的技术铺垫文章主体层次选题目的和意义:与本课题相关的技术和方法综述:主要设计内容:设计的环境、方法及措施:参考文献 配套资源 本系列校训 互相伤害互相卷,玩命学习要你管,天生我…...
学习笔记|百度文心千帆大模型平台测试及页面交互简易代码
目前百度文心一言的内测资格申请相当拉胯,提交申请快3个月,无任何音讯。不知道要等到什么时候。 百度适时开放了百度文心千帆大模型平台,目前可以提交申请测试,貌似通过的很快,已取得测试申请资格,可以用起…...
Python中的数据科学实验库有哪些?
Python中有许多数据科学实验库可供使用。以下是一些常用的库: NumPy:用于处理大型多维数组和矩阵的基础数学库。Pandas:用于数据处理和分析的库,提供了灵活的数据结构和数据操作工具。Matplotlib:用于创建静态、动态和…...
区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测
区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测 目录 区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRLSTM长短期记忆神经网络分位数回…...
Pytorch nn.Linear的基本用法与原理详解
1. 参考 Pytorch nn.Linear的基本用法与原理详解_iioSnail的博客-CSDN博客 [机器学习]深度学习初学者大疑问之nn.Linear(a,b)到底代表什么?_五阿哥爱跳舞的博客-CSDN博客...
数据结构:栈和队列的实现和图解二者相互实现
文章目录 写在前面栈什么是栈栈的实现 队列什么是队列队列的实现 用队列实现栈用栈模拟队列 写在前面 栈和队列的实现依托的是顺序表和链表,如果对顺序表和链表不清楚是很难真正理解栈和队列的 下面为顺序表和链表的实现和图解讲解 手撕图解顺序表 手撕图解单链表 …...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
