当前位置: 首页 > news >正文

数据结构实现-线性表

顺序存储

#include<iostream>
using namespace std;
#define MaxSize 50
//静态顺序表
template<typename ElemType>
struct sqList{ElemType data[MaxSize];//元素int length;//长度
};
//动态顺序表
#ifdef DEBUG //关闭启用
#define InitSize 100
template<typename ElemType>
struct seqList {ElemType* data;//元素int MaxSize;//最大容量int length;//长度
};
#endif // DEBUG//插入操作
template<typename ElemType>
/**	@param L 顺序表*	@param i 插入位置(从1开始)*	@param e 插入元素
*/
bool ListInsert(sqList<ElemType>& L, int i, ElemType e) {if (i<1 || i>L.length + 1)//判断插入范围是否合理(第1个元素到最后一个元素的下一个)return false;if (L.length >= MaxSize)//顺序表长度大于最大长度return false;for (int j = L.length; j >= i; --j) {//移动顺序表L.data[j] = L.data[j - 1];}L.data[i - 1] = e;//插入++L.length;  //长度+1return true; //表示插入成功
}//删除操作
template<typename ElemType>
/**	@param L 顺序表*	@param i 删除位置(从1开始)*	@param e 插入元素
*/
bool ListDelete(sqList<ElemType>& L, int i, ElemType& e) {if (i<1 || i>L.length) //删除元素下标范围return false;e = L.data[i - 1];  //复制删除内容for (int j = i ; j < L.length; ++j) {L.data[j - 1] = L.data[j];}--L.length; //顺序表长度-1return true; //操作成功
}//按值查找(顺序查找)
template<typename ElemType>
/**	@param L 顺序表*	@param e 查找元素
*/
int LocalElem(sqList<ElemType>& l, ElemType& e) {int i;for (i = 0; i < l.length; ++i) {if (l.data[i] == e) //找到待查找元素下标return i + 1;}return 0;
}

链式存储

#include<iostream>
using namespace std;//链表节点
template<typename ElemType>
struct LNode {ElemType data;//元素struct LNode *next;//长度
};//头插法建立链表
template<typename ElemType>
/**	@param L 顺序表
*/
LNode<ElemType>* List_HeadInsert(LNode<ElemType>* L) {LNode<ElemType>* s; ElemType x;L = new LNode<ElemType>;L->next = nullptr;cin >> x;while (x != 9999) {s = new LNode<ElemType>;s->data = x;s->next = L->next;L->next = s;cin >> x;}return L;
}//尾插法建立链表
template<typename ElemType>
/**	@param L 顺序表
*/
LNode<ElemType>* List_TailInsert(LNode<ElemType>* L) {ElemType x;L = new LNode<ElemType>;LNode<ElemType>* s, * r = L;cin >> x;while (x != 9999) {s = new LNode<ElemType>;s->data = x;r->next = s;r = s;cin >> x;}r->next = nullptr;return L;
}//按序号查找结点
template<typename ElemType>
/**	@param L 顺序表*	@param i 位置(从1开始)
*/
LNode<ElemType>* GetElem(LNode<ElemType>*L, int i) {if (i < 1)return nullptr;int j = 1;LNode<ElemType>* p = L->next;while (p != nullptr && j < i) {p = p->next;++j;}return p;
}//按值查找节点
template<class ElemType>
/**	@param L 顺序表*	@param e 插入元素
*/
LNode<ElemType>* LocateElem(LNode<ElemType>* L, ElemType e) {LNode<ElemType>* p = L;while (p!=nullptr&&p->data!=e){p = p->next;}return p;
}//在第i个前插入节点
template<class ElemType>
/**	@param L 顺序表*	@param i 插入位置(从1开始)*	@param e 插入元素
*/
bool Front_Insert(LNode<ElemType>* L, int i, ElemType e) {LNode<ElemType>* temp = GetElem(L, i - 1);if (temp == nullptr)return false;LNode<ElemType>* newNode = new LNode<ElemType>;newNode->data = e;newNode->next = temp->next;temp->next = newNode;return true;
}//删除第i个节点
template<class ElemType>
/**	@param L 顺序表*	@param i 位置(从1开始)
*/
bool Delete(LNode<ElemType>* L, int i) {LNode<ElemType>* temp = GetElem(L, i - 1);if (temp == nullptr)return false;LNode<ElemType>* next = temp->next;temp->next = temp->next->next;delete next;return true;
}//获取链表长度
template<class ElemType>
/**	@param L 顺序表
*/
int GetLinkLength(LNode<ElemType>* L) {int cnt = 0;LNode<ElemType>* cur = L->next;while (cur){++cnt;cur = cur->next;}return cnt;
}

相关文章:

  • Javaweb之SpringBootWeb案例之自动配置的原理分析的详细解析
  • Flink基本原理 + WebUI说明 + 常见问题分析
  • element-plus表格合并
  • C 基本语法
  • C#双向链表实现:Append()方法追加并显示数据
  • 【k8s管理--两种方式安装prometheus】
  • 【Linux杂货铺】调试工具gdb的使用
  • 基于ZYNQ的PCIE高速数据采集卡的设计(一)
  • 【UE 材质】冰冻效果
  • 【风格迁移】StyTr2:引入 Transformer 解决 CNN 在长距离依赖性处理不足和细节丢失问题
  • elasticsearch、Kibana 与logstash分布式使用方案(珍藏版)
  • Unity3d Shader篇(十一)— 遮罩纹理
  • tomcat部署和优化(二)----- 轻松搭建博客、状态页优化、虚拟主机配置
  • Java如何剪切视频
  • ubuntu+QT+ OpenGL环境搭建和绘图
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 30秒的PHP代码片段(1)数组 - Array
  • Debian下无root权限使用Python访问Oracle
  • JavaScript 基本功--面试宝典
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • mysql中InnoDB引擎中页的概念
  • Spring框架之我见(三)——IOC、AOP
  • SwizzleMethod 黑魔法
  • 译有关态射的一切
  • 智能合约Solidity教程-事件和日志(一)
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • # Panda3d 碰撞检测系统介绍
  • #Spring-boot高级
  • #微信小程序(布局、渲染层基础知识)
  • #微信小程序:微信小程序常见的配置传值
  • $(function(){})与(function($){....})(jQuery)的区别
  • $.proxy和$.extend
  • (2)nginx 安装、启停
  • (2.2w字)前端单元测试之Jest详解篇
  • (Python) SOAP Web Service (HTTP POST)
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (十一)c52学习之旅-动态数码管
  • (算法)N皇后问题
  • (小白学Java)Java简介和基本配置
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net Core 中间件验签
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @ComponentScan比较
  • @ResponseBody
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [04] Android逐帧动画(一)
  • [20160807][系统设计的三次迭代]
  • [ActionScript][AS3]小小笔记
  • [CLickhouse] 学习小计
  • [Docker]六.Docker自动部署nodejs以及golang项目