链表基础知识

要点:链表的一个结点中,除了要保存数据,还必须保存它下一个结点的地址。

链表类型:

(1)单链表:每个结点只包含一个引用(即地址),指向下一个结点

(2)双向链表:每个结点包含两个引用,指向它的上一个结点和下一个结点

(3)单循环链表:在单链表中,表尾结点的引用指向表头结点即为单循环链表

准备数据

1 class data {
2     String name ;
3     String key ;
4     int age ;
5 }
6 class CLType {
7     data nodeData = new data();
8     CLType nextNode;
9 }

class data 为结点的类,class CLType是链表的类。

链表的基本操作

追加结点(在末尾增加一个结点)

步骤:

(1)申请内存空间,保存新增的结点

(2)从表头开始检查,找到最后一个结点

(3)把表尾的引用指向新的结点

(4)把新增的结点的引用设置为null

 1 CLType CLAddEnd(CLType head,data nodeData) {
 2     CLType node,htemp;
 3     if((node = new CLType) == null) {
 4         System.out.println("申请内存失败");
 5         return null;
 6     }
 7     else {
 8         node.nodeData = nodeData;
 9         node.nextNode = null;
10         if(head == null){
11             head = node;
12             return head;
13         }
14         htemp = head;
15         while(htemp.nextNode != null){
16             htemp = htemp.nextNode;
17         }
18         htemp.nextNode = node;
19         return head;
20     }
21 }

查找结点(通过关键字查找)

 1 CLType CLFindNode(CLType head,Strind key){
 2     CLType htemp;
 3     htemp = head;            //从头开始找
 4     while(htemp != null){    //若结点有效,则开始查找
 5         if(htemp.nodeData.key.compareTo(key) == 0){
 6             return htemp;
 7         }
 8         htemp = htemp.nextNode;
 9     }
10     return null;        //没找到
11 }

插入结点

步骤:

(1)申请内存

(2)找到要插入的逻辑位置(位于哪两个结点之间)

(3)修改插入位置结点的引用

 1 CLType CLInsertNode(CLType head,Srting findkey,data nodeData){
 2     CLType node,nodetemp;
 3     if((node = new CLType()) == null){      //    申请内存
 4         System.out.println("申请内存失败");
 5         return null;
 6     }
 7     node.nodeData = nodeData;                //保存新增结点的数据
 8     nodetemp = CLFindNode(head,findkey);
 9     if(nodetemp == null){
10         node.nextNode = nodetemp.nextNode;
11         nodetemp.nextNode = node;
12     }
13     else{
14         System.out.println("未找到正确位置");
15     }
16     return head;
17 }

删除结点

(1)找到要删除的结点

(2)使前一结点的引用指向要删除结点的下一个结点

(3)删除结点

 1 int CLDeleteNode(CLType head,String key){
 2     CLType node ,htemp;
 3     htemp = head;
 4     node = head;
 5     while(htemp != null){
 6         if(htemp.nodeData.key.compareTo(key) == 0){
 7             node.nextNode = htemp.nextNode;
 8             htemp = null;        //释放内存
 9             return 1;
10         }
11         else {
12             node = htemp;
13             htemp = htemp.nextNode;
14         }
15     }
16     return 0;
17 }
时间: 2024-08-04 23:16:03

链表基础知识的相关文章

哈希表基础知识

哈希表基础知识 哈希法又称散列法.杂凑法以及关键字地址计算法等,相应的表称为哈希表,是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法. 其基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数.创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元:以后当查找关键字为k的元素时,再利用哈希函数计算出该元素的存储位置p=f(k),从而达到按关键字直接存取元素的目的. 但关键字集合很大时,关键字值不同的元素可能会映射到哈希表的同

C++STL泛型编程基础知识讲解--------2015年2月3日

今天学习了C++STL泛型编程的基础知识,我对主要知识整理如下: STL提供三种类型的组件:容器,迭代器,算法.支持泛型程序设计标准.容器主要有两类:顺序容器和关联容器.顺序容器:vector,list,deque,string等都是一系列连续元素的集合.关联容器:set,multiset,map,multimap包含查找元素的键值.迭代器:遍历容器STL算法库:排序算法,不可变序算法,变序性算法,数值算法. /******************************************

《计算机科学导论》之数据结构基础知识

<计算机科学导论(第二版)>  11章   数据结构 11.1  引言  1.为什么要使用数据结构? 尽管单变量在程序设计语言中被大量使用,但是它们不能有效地解决复杂问题.此时考虑使用数据结构. 2.数据结构是什么? 数据结构是相互之间存在一种或多种特定关系的数据元素的集合. 3.三种数据结构 数组: 记录; 链表: 大多的编程语言都隐式实现了前两种,而第三种则通过指针和记录来模拟. 11.2  数组 1.为什么使用数组? 为了处理大量的数据,需要一个数据结构,如数组.当然还有其他的数据结构.

这些基础知识你都了解吗?——《松本行弘的程序世界》读书笔记(上)

1. 前言 半个月之前买了这本书,还是经园子里的一位网友推荐的.到现在看了一半多,基础的都看完了,剩下的几章可做高级部分来看.这本书看到现在,可以说感触很深,必须做一次读书笔记! 关于这本书,不了解的可以去网上查查.作者是Ruby语言的创始人,可谓是程序世界中的高手,开卷有益,不管你是哪个层次的编程人员,相信都能或多或少的汲取到你想要的营养. 下面将总结一下看完本书我记录下的一些知识点.有的是书中的原话,有的是我个人的理解,供参考. 2. 面向对象 2.1 多态性 面向对象三大原则:继承.封装和

加壳学习笔记(一)-基础知识

1.预备知识 1.关于栈,在windows里面的堆栈其实很简单,当学了才知道哈,呵呵,第一要记住的是windows里面的栈是向低地址生长的(extended,延伸,呵呵,顺便丰富下英语的单词量,确实是少的可怜),你可以这样认为,栈就像是一个倒立的箱子,箱子的口子是向下的,底是向上的,这里就表明了系统栈的分布也是延伸方向是由高地址向低地址extended,在最初的空栈阶段,栈顶(extended stack pointer,简称是esp)在栈底的低一个位置,呵呵,其实很好理解,就是说最初的箱子是空

JavaSe基础知识总结

Java基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用.demo 4,该技术什么时候用?test. -------------------------------------------------------------------------

黑马程序员——集合基础知识(Collection)

集合基础知识 数组:长度固定,可存基本数据和对象. 集合:只能放对象,不固定.容器也有共性,不断抽取成一个体系,集合框架.参阅顶层创建底层.顶层是collection.collection里有两个常见的接口,List和Set.常见集合有Arraylist,linkedlist,vector,hashSet TreeSet.为什么会出现这么多的容器呢,因为每一个容器对数据的存储方式都有不一样,.这个存储方式称之为数据结构!!因为他们的特点不一样 list因为有脚标存储和删除的效率很低,Set的效率

什么才是java的基础知识?

近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. 我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多.编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑).但同时自己心里明白,自己其实没有什么水平,自己这3,4年以来学懂的东西就那么多,其他人几个月就可以

Oracle数据库基础知识

oracle数据库plsql developer 目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外键 创建删除索引 创建修改删除视图 二     SQL查询 基本的SQL语句 unionminusintersect 内连接外连接 子查询关联子查询 betweeninexists 复制表insert into selectselect into from 三     SQL查询优化 尽量少用 IN 操