数据结构--顺序表、单链表
线性表是指顺序表和单链表
//顺序表数据结构
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博客...
数据结构:栈和队列的实现和图解二者相互实现
文章目录 写在前面栈什么是栈栈的实现 队列什么是队列队列的实现 用队列实现栈用栈模拟队列 写在前面 栈和队列的实现依托的是顺序表和链表,如果对顺序表和链表不清楚是很难真正理解栈和队列的 下面为顺序表和链表的实现和图解讲解 手撕图解顺序表 手撕图解单链表 …...
基于TINA的英飞凌功率MOSFET SPICE瞬态仿真与损耗优化实战
1. 功率MOSFET仿真基础与TINA软件入门 电力电子工程师在设计电源系统时,最头疼的问题之一就是如何准确预测功率MOSFET的损耗。我刚开始接触这个领域时,曾经因为低估了开关损耗导致整个电源模块过热报废,损失惨重。后来发现,TINA-T…...
【实战篇】Nginx核心配置与性能优化全攻略
1. Nginx基础配置快速上手 第一次接触Nginx时,我被它简洁的配置文件结构惊艳到了。相比其他Web服务器动辄几百行的配置,Nginx的配置文件就像一份精心设计的菜谱,每个指令都恰到好处。先带大家看看最基本的配置结构: # 全局块 user…...
QGIS里怎么加载NASA的SRTM高程数据?从下载到3D可视化的保姆级教程
QGIS实战:从NASA SRTM高程数据下载到3D地形可视化全流程指南 当你第一次在QGIS中看到那些起伏的山脉、蜿蜒的河谷以三维形式呈现时,那种将地理数据转化为视觉故事的成就感是无与伦比的。NASA的SRTM(航天飞机雷达地形测绘任务)高程…...
DAB SG(信号发生器)的频道与频率设置详解
1. DAB SG信号发生器基础入门 第一次接触DAB SG信号发生器时,很多人会被那些专业术语搞得一头雾水。其实说白了,这就是个能模拟DAB广播信号的设备,主要用在广播设备测试、信号覆盖测试等场景。我刚开始用的时候也犯迷糊,后来才发现…...
Figma转JSON完全实战方案:实现设计数据与开发流程的无缝对接
Figma转JSON完全实战方案:实现设计数据与开发流程的无缝对接 【免费下载链接】figma-to-json 项目地址: https://gitcode.com/gh_mirrors/fi/figma-to-json Figma-to-JSON是一款创新的开源工具,专为解决设计工具与开发流程之间的数据鸿沟而生。通…...
番茄小说下载器:如何轻松搭建你的个人离线图书馆?
番茄小说下载器:如何轻松搭建你的个人离线图书馆? 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 还在为网络不稳定无法畅读小说而烦恼吗?番…...
保姆级教程:用Docker快速部署FreeSWITCH的ASR服务(含FunASR、sherpa-ncnn)
基于Docker的FreeSWITCH语音识别服务实战指南 语音识别(ASR)技术正在重塑通信系统的交互方式。对于FreeSWITCH开发者而言,将高效ASR服务集成到电话系统中,可以解锁语音指令控制、实时字幕生成、智能客服等创新应用场景。Docker技术…...
基于vue的断舍离管理系统[vue]-计算机毕业设计源码+LW文档
摘要:随着物质生活的丰富,物品管理成为人们生活中的一个重要问题。断舍离管理系统的设计与实现旨在帮助用户更好地管理个人物品,通过合理的分类、捐赠和回收机制,实现物品的有效清理和资源的合理利用。本文基于Vue框架设计并实现了…...
Composio审计日志系统:全面追踪AI工具执行与操作记录
Composio审计日志系统:全面追踪AI工具执行与操作记录 【免费下载链接】composio Composio powers 1000 toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action. 项目…...
深求·墨鉴(DeepSeek-OCR-2)惊艳效果:书法题跋+钤印位置+行气关系可视化还原
深求墨鉴(DeepSeek-OCR-2)惊艳效果:书法题跋钤印位置行气关系可视化还原 1. 引言:当OCR遇见水墨美学 你有没有遇到过这样的场景?面对一幅珍贵的书法作品或古籍文献,想要将其中的文字内容数字化࿰…...
