链表:链表与数组有一定的相似性,但是也有一定的区别。数组在查找遍历方面快速简单,数组是通过下表索引查找;而链表在插入删除方面方便简单。数组在插入方面要移动一大堆的数据,而链表确实修改索引就可以轻松达到
获取链表的长度算法
public int getSize() { int num = 0; if(head==null){//空列表 }else{ //非空列表 num++;//加上头结点 Node node=head.getNaxt(); //获取头结点后的节点 while(node!=null){//节点非空 num++;//节点数累加 node=node.getNaxt();//节点指针后移 } } return num; }
添加节点的方法:要判断是否为头结点
@Override /** * 添加数据节点到链表的末尾 */ public void add(String date) { Node node =new Node(date,null); if(getSize()==0){//空自定义列表 head=node; }else{ Node node1=get(getSize()-1); node1.setNaxt(node); } } /** * 添加元素到指定索引位置 */ @Override public void add(int index, String date) { Node node =new Node(date,null); if(index<0||index>getSize()){//越界 try { throw new Exception("越界"); } catch (Exception e) { e.printStackTrace(); } }else if(index==0){//空列表时候插入的节点为头结点 node.setNaxt(head); head=node; }else{//插入节点到指定的索引出 Node node1=get(index-1); Node node2=get(index); node.setNaxt(node2); node1.setNaxt(node); } }
删除节点方法,要判断要删除的节点是否在链表当中
/** * 删除指定的数据元素节点 */ @Override public void del(String date) { int i=fint(date); if(i!=-1){//要删除的数据节点在列表当中 get(i-1).setNaxt(get(i+1));//删除节点 } } /** * 删除指定索引的节点 */ @Override public void del(int intdex) { if(intdex<0||intdex>getSize()){//索引越界 try { throw new Exception("越界"); } catch (Exception e) { e.printStackTrace(); return; } } //删除节点 Node node1=get(intdex-1); Node node2=get(intdex+1); node1.setNaxt(node2); }
查找节点方法:要判断链表是否为空,节点是否是在链表当中
/** * 查找指定索引的节点 */ public String fint(int intdex) { return get(intdex).getData();//放回指定索引的节点的数据 } /** * 查找指定数据元素的节点 */ public int fint(String deta) { int num=0; Node node=head; if(node.getData().equals(deta)){//头结点的数据等于要查找的元素 return num;//放回节点数 } while(!node.getData().equals(deta)&&node.getNaxt()!=null){//节点后移查找元素 num++; node=node.getNaxt(); } if(num==getSize()&&!node.getData().equals(deta)){//查找的元素不在列表中 try { throw new Exception("不存在该数据的节点"); } catch (Exception e) { e.printStackTrace(); } return -1; } else return num; }
获取某节点的方法属于链表操作的核心位置是其他方法的基础,不仅要判断连表是否为空是否存在,索引是否越界
/** * 获取指定的索引的节点 */ public Node get(int intdex){// if(intdex<0){//列表为空 try { throw new Exception("无该节点"); } catch (Exception e) { e.printStackTrace(); return null; } } int count = 0; // 如果index为0的情况,则直接返回头节点 if (count == intdex) {//查找到元素 return head; } // 判断索引是不是已经越界 if (intdex < getSize()) { // 如果没有越界的情况,获取头节点的下一个节点 Node node = head.getNaxt(); while (node != null) { count++; if (count == intdex) { return node; } node = node.getNaxt(); } } else { // 如果索引位置为负数,打印异常栈 try { throw new Exception("索引越界"); } catch (Exception e) { e.printStackTrace(); } } return null; }
二叉树:
建立预置的二叉树本质上与实现链表差不多,只不过是在节点中增加多一个索引“指针”,先是把每个节点实例化为一个个孤立的节点,之后通过一定的顺序把节点连接起来。这样简单的二叉树就可以建立起来,在二叉树当中,满二叉树、完全二叉树是相对简单一点的,但是一般的二叉树还是会有一定的难度,在中间的某处的节点得度为一,这个是非常头疼的,但是我们可以把它想成完全二叉树来构建,在度为一的节点处以特殊的标志来代表空节点以及该节点的子树。在建立完全二叉树时候,我们可以把所有的双亲节点单独出来,其中最后一个双亲节点再从双亲节点当中单独出来,以便对最后一(两)个叶子做处理
/** * 建立二叉树 */ public void creadTree( ){ //创建孤立节点 for(int i=0;i<array.length;i++){ TreeNode tNode=new TreeNode(array[i],null,null); list.add(tNode); } //遍历双亲节点,不包括最后一个双亲节点 for(int i=0;i<list.size()/2-1;i++){ //建立左子树的链接 list.get(i).setLNode(list.get(i*2+1)); //建立有子树的链接 list.get(i).setRNode(list.get(i*2+2)); } //最后一个双亲节点建立左节点的链接 list.get(list.size()/2-1).setLNode(list.get((list.size()/2-1)*2+1)); //若存在右节点则建立右节点 if((list.size()/2-1)*2+2<list.size()){ list.get(list.size()/2-1).setLNode(list.get((list.size()/2-1)*2+2)); } }
树的遍历通过递归是最简单的方法,但是在递归当中一定的处理递归出口
相关推荐
"数构"可能是"数据结构"的简称,而"结构数据"可能指的是特定类型的数据结构,如数组、链表、树或图等。 数据结构主要包括以下几大类: 1. 基本数据结构:数组是最基础的数据结构,它是一组相同类型元素的集合,...
2. 其中最简单的构股数是(3, 4, 5),其他的如(5, 12, 13),(8, 15, 17)等。 3. 构股数必须是正整数,并且三边中c为最长的一边,即斜边。 4. 构股数的每一条边都可以视为一个正方形的边长,三边对应三个正方形的面积...
"数构资料典例"这个压缩包文件很可能包含了一系列关于数据结构的经典实例和练习,旨在帮助学习者深入理解和掌握这一领域。 在数据结构中,我们通常会遇到以下几种关键类型: 1. **线性结构**:如数组和链表,它们...
济南大学考研的数构资料应涵盖以上知识点,并可能涉及具体题目解析和实例演示,帮助考生巩固理论、提升算法设计和分析能力。希望这份资料能成为你考研路上的得力助手,助你在数据结构这一领域取得优异的成绩。
在2007数构课件中,可能涵盖了以下关键知识点: 1. **线性数据结构**:如数组和链表,它们是最基础的数据结构。数组提供随机访问,但插入和删除操作较慢;链表则相反,插入和删除快速,但访问速度慢。 2. **栈和...
文章的这部分描述还提到了“无轮三色和四色图的圈构形”,这里的“圈构形”可能是指在三色或四色图中构成的圈(闭合回路),而“无轮”可能是指不包含特殊结构的简单图。 内容中出现的大量的数字、字符、符号组合在...
该模型假设材料内部的应变能量密度函数与广义应变的二次项成比例,简单且易于实施。在ANSYS中,我们可以通过编写UserMAT子程序实现这一模型。 首先,UserMAT子程序的基本结构包括定义材料参数、计算应变能密度、...
钢构CAD 3.1 中国最方便的CAD画图程序! 中国最好用的钢结构施工程序! 中国最优秀的钣金展开放样程序! 中国概念超前图数一体钣金程序!...世界独创“图数一体”展开理论,创新思维概念超前,操作简易方法领先。
对于那些不能简单用数学方程描述的问题,数据结构提供了一种框架来理解和处理数据。 线性结构是最基础的数据结构之一,如学生信息表的例子所示。在这种结构中,数据元素按照线性的顺序排列,每个元素可以直接访问,...
相比于规模庞大的相控阵天线,反射阵天线设计简单、成本更低,可结合具有相位调制特性的超构表面单元,利用几何分区、口径场叠加以及交替投影等方法实现多波束辐射,具有良好的应用前景。 本文设计的编码超构表面...
五十年代至七十年代初,在云南晋宁县石寨山和江川县李家山先后几批出土了春秋战国至西汉时期的数千件青铜器,其中,有四件造型别致的井干式壁体青铜房屋模型,有一组为小巧玲珑的三合院,另一件鼓形贮贝器上铸有“井...
为了提高填挖方计算精度,采用构建不规则三角网法,构建设计...法,通过解算矢量三角形,使计算模型简单化,以便于计算机自动化实现。阐述了二次构TIN实现填挖方计算的方 法和具体步骤,给出了计算过程中所用到的数学模型。
- **线弹性**:这是最简单的模型之一,通常用于初步设计阶段,假设材料在小应变范围内遵循胡克定律。 - **非线性弹性**:这种模型考虑了材料在大应变下的非线性响应,但仍保持材料的可逆性。 - **弹塑性**:这类模型...
二叉顺序数可能指的是二叉查找树(Binary Search Tree,BST)。这种数据结构是一棵特殊的二叉树,其中每个节点的左子树只包含比其关键字小的节点,右子树包含比其关键字大的节点。这使得在二叉查找树中查找、插入和...
转 换函 数 Β 8 中圈 分 类 号 ? Χ Δ > ? 文 献 标 识 码 ? Ε 文 章 编 号 ? 一 ? ? · ? > Φ ; ! ? ? 一 < ? 一 ? ? ? · ? !">摘 共 ? 讨 论 了 计 算 机编译 系 统 中 9 : ; ? < 项 目 集规 范 ...
VUMAT是ABAQUS中用于自定义材料模型的子程序接口,允许用户通过编写自己的Fortran代码来定义材料的本构模型。这个文档是对VUMAT初学者的一个示例,其主要目的是为了帮助初学者理解和掌握如何开发适合于ABAQUS/...
遗传积分形式与弹性元件和粘壶串并联表示的微分形式可以描述... 模型材料参 数随应变率而变,所以模型适合于从准静态到冲击载荷的较宽应变率范围. 作为应用,计算了简单剪切有 限变形,就建议的模型与现有的模型进行了比
本示例代码实现了一个简单的线性数据结构——环形队列(Circular Queue),它在内存中使用固定大小的数组来存储元素,并通过前后指针管理元素的入队(enqueue)和出队(dequeue)操作。 环形队列是队列的一种变体,...
这四种排序算法分别是:快速排序、直接插入排序、简单选择排序和起泡排序。接下来,我们将逐一探讨这些排序算法。 1. **快速排序**: 快速排序是由C.A.R. Hoare在1960年提出的一种非常高效的排序算法,它的基本...