数据结构--顺序表、单链表
线性表是指顺序表和单链表
//顺序表数据结构
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博客...

数据结构:栈和队列的实现和图解二者相互实现
文章目录 写在前面栈什么是栈栈的实现 队列什么是队列队列的实现 用队列实现栈用栈模拟队列 写在前面 栈和队列的实现依托的是顺序表和链表,如果对顺序表和链表不清楚是很难真正理解栈和队列的 下面为顺序表和链表的实现和图解讲解 手撕图解顺序表 手撕图解单链表 …...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...