- 浏览: 22441 次
- 性别:
- 来自: 杭州
最新评论
今天匆忙之中就快速展示我的链表一些基本操作,包括增加,删除,插入,查找,求长度。
public class ListTest {
//定义几个全局变量
public static Node front=null;//第一个结点
public static Node last=null;//最后一个结点
public static void main(String args[]){
ListTest test=new ListTest();
//调用链表里的方法
for(int i=0;i<10;i++){
test.add("结点"+i);
}
//调用第一个递归方法
test.NodePrint1(front);
//调用插入的方法
Node node=new Node();
node.obj="插入的新9结点";
test.Nodecharu(node,3);
//调用第一个递归方法
test.NodePrint1(front);
//调用删除方法
test.DeletNode(2);
//调用第一个递归方法
test.NodePrint1(front);
//获取当前链表的长度
int t=test.GetLength();
System.out.println("当前链表的长度为:"+t);
Node node2=new Node();
node2.obj="插入的新9结点";
int k=test.LookNode(node2);
System.out.println("找到该结点的位置为"+k);
}
/*
* 增加的方法
* obj为你添加的数
*/
public void add(Object obj){
//创建一个新的结点
Node fristnode=new Node();
fristnode.obj=obj;
if(front==null){
front=fristnode;//把创建的新结点赋给第一个结点
last=front;//第一个结点和最后一个结点相等
}else{
//增加肯定在链表尾增加
last.child=fristnode;//最后一个结点指向下一个新结点
fristnode.parent=last;
last=fristnode;//把最后一个结点记为新的last
}
}
/**
* 打印的方法,这个为从左到右遍历
*/
public void NodePrint1(Node root){
if(root!=null){
//取出该结点元素
Object data=root.obj;
//取出下一个结点进行递归
System.out.println("结点元素为:"+data);
Node node1=new Node();
node1=root.child;
NodePrint1(node1);
}
}
/**
* 这个为从右到左的遍历
*/
public void NodePrint2(Node root){
if(root!=null){
//取出该结点元素
Object data=root.obj;
//取出该结点上一个结点进行递归
System.out.println("结点元素为"+data);
Node node2=new Node();
node2=root.parent;
NodePrint2(node2);
}
}
/**
* 获得当前链表的长度
*/
public int GetLength(){
int count=0;
Node node3=new Node();
node3=front;
while(node3!=null){
node3=node3.child;
count++;
}
return count;
}
/**
* 插入的方法
* node 为你插入的结点,i为你插入的位置
*/
public void Nodecharu(Node node,int i){
if(i<0||i>this.GetLength()){
throw new java.lang.RuntimeException("该位置不存在");
}else{
if(i==0){
front=node;
}else{
//创建一个新的结点来记录插入的结点
Node fristnode=new Node();
fristnode=front;
//找的要插入位置的结点
for(int j=1;j<i;j++){
fristnode=fristnode.child;
}
//创建一个新的结点来记录插入结点的上一个结点
Node secondnode=new Node();
secondnode=fristnode.parent;
//建立关系
node.child=fristnode;
fristnode.parent=node;
node.parent=secondnode;
secondnode.child=node;
}
}
}
/**
* 删除的方法
* i为你删除的位置
*/
public void DeletNode(int i){
if(i<1||i>this.GetLength()){
throw new java.lang.RuntimeException("该位置不存在");
}else{
//创建一个新的结点来记录插入的结点
Node DeletNode=new Node();
DeletNode=front;
if(i==1){
front=DeletNode.child;
}else{
//找的要删除位置的结点
for(int j=1;j<i;j++){
DeletNode= DeletNode.child;
}
//找到父结点
Node DeletParent=new Node();
DeletParent=DeletNode.parent;
if(i==this.GetLength()){
DeletParent.child=null;
}else {
//找到子结点
Node DeletChild=new Node();
DeletChild=DeletNode.child;
//建立相互关系
DeletParent.child=DeletChild;
DeletParent=DeletChild.parent;
}
}
}
}
/**
* 查找的方法
*/
public int LookNode(Node node){
//创建一个整数来记录你查到的位置
int k=1;
//创建一个结点
Node renode=new Node();
renode=front;
while(renode.obj!=node.obj){
k++;
renode=renode.child;
}
return k;
}
}
代码仅供参考,其实尚且有些毛病,还需改进,细心的人会发现的。
public class ListTest {
//定义几个全局变量
public static Node front=null;//第一个结点
public static Node last=null;//最后一个结点
public static void main(String args[]){
ListTest test=new ListTest();
//调用链表里的方法
for(int i=0;i<10;i++){
test.add("结点"+i);
}
//调用第一个递归方法
test.NodePrint1(front);
//调用插入的方法
Node node=new Node();
node.obj="插入的新9结点";
test.Nodecharu(node,3);
//调用第一个递归方法
test.NodePrint1(front);
//调用删除方法
test.DeletNode(2);
//调用第一个递归方法
test.NodePrint1(front);
//获取当前链表的长度
int t=test.GetLength();
System.out.println("当前链表的长度为:"+t);
Node node2=new Node();
node2.obj="插入的新9结点";
int k=test.LookNode(node2);
System.out.println("找到该结点的位置为"+k);
}
/*
* 增加的方法
* obj为你添加的数
*/
public void add(Object obj){
//创建一个新的结点
Node fristnode=new Node();
fristnode.obj=obj;
if(front==null){
front=fristnode;//把创建的新结点赋给第一个结点
last=front;//第一个结点和最后一个结点相等
}else{
//增加肯定在链表尾增加
last.child=fristnode;//最后一个结点指向下一个新结点
fristnode.parent=last;
last=fristnode;//把最后一个结点记为新的last
}
}
/**
* 打印的方法,这个为从左到右遍历
*/
public void NodePrint1(Node root){
if(root!=null){
//取出该结点元素
Object data=root.obj;
//取出下一个结点进行递归
System.out.println("结点元素为:"+data);
Node node1=new Node();
node1=root.child;
NodePrint1(node1);
}
}
/**
* 这个为从右到左的遍历
*/
public void NodePrint2(Node root){
if(root!=null){
//取出该结点元素
Object data=root.obj;
//取出该结点上一个结点进行递归
System.out.println("结点元素为"+data);
Node node2=new Node();
node2=root.parent;
NodePrint2(node2);
}
}
/**
* 获得当前链表的长度
*/
public int GetLength(){
int count=0;
Node node3=new Node();
node3=front;
while(node3!=null){
node3=node3.child;
count++;
}
return count;
}
/**
* 插入的方法
* node 为你插入的结点,i为你插入的位置
*/
public void Nodecharu(Node node,int i){
if(i<0||i>this.GetLength()){
throw new java.lang.RuntimeException("该位置不存在");
}else{
if(i==0){
front=node;
}else{
//创建一个新的结点来记录插入的结点
Node fristnode=new Node();
fristnode=front;
//找的要插入位置的结点
for(int j=1;j<i;j++){
fristnode=fristnode.child;
}
//创建一个新的结点来记录插入结点的上一个结点
Node secondnode=new Node();
secondnode=fristnode.parent;
//建立关系
node.child=fristnode;
fristnode.parent=node;
node.parent=secondnode;
secondnode.child=node;
}
}
}
/**
* 删除的方法
* i为你删除的位置
*/
public void DeletNode(int i){
if(i<1||i>this.GetLength()){
throw new java.lang.RuntimeException("该位置不存在");
}else{
//创建一个新的结点来记录插入的结点
Node DeletNode=new Node();
DeletNode=front;
if(i==1){
front=DeletNode.child;
}else{
//找的要删除位置的结点
for(int j=1;j<i;j++){
DeletNode= DeletNode.child;
}
//找到父结点
Node DeletParent=new Node();
DeletParent=DeletNode.parent;
if(i==this.GetLength()){
DeletParent.child=null;
}else {
//找到子结点
Node DeletChild=new Node();
DeletChild=DeletNode.child;
//建立相互关系
DeletParent.child=DeletChild;
DeletParent=DeletChild.parent;
}
}
}
}
/**
* 查找的方法
*/
public int LookNode(Node node){
//创建一个整数来记录你查到的位置
int k=1;
//创建一个结点
Node renode=new Node();
renode=front;
while(renode.obj!=node.obj){
k++;
renode=renode.child;
}
return k;
}
}
代码仅供参考,其实尚且有些毛病,还需改进,细心的人会发现的。
发表评论
-
自定义的ArrayList队列实现方法
2014-04-13 11:38 1395最近参加金山网络的一次笔试,给我感觉是基础需 ... -
n皇后问题
2013-11-03 22:53 1184之前听过一个 ... -
java里的反射机制
2013-05-19 10:53 721作为一个java初学者,想了解java里的反射机 ... -
关于优先队列和hash的简介
2013-05-04 11:50 1086关于优先队列和hash的简介 一.优先队列的引入 JDK ... -
Bitmap在排重问题上的应用
2013-05-04 11:42 878其实这篇,我已经写了好久,只是一直没发。因为里面还有一些 ... -
哈夫曼压缩的步骤
2012-10-27 16:23 1101人一旦闲下来就很恐怖的,已经好久都没写博客了,热情也不如先前 ... -
画图板的两种重绘方法
2012-07-15 20:41 1469对于这两种重绘方法 ... -
关键字
2012-07-15 19:41 677对于关键字的总结 1.访问限定符 用来定义 类的 ... -
登陆界面小结
2012-07-07 11:22 843今天我对前不久所学进行自己一些小结 1.首先谈到Java程序 ... -
排序1
2012-07-06 19:12 644关于排序的总结 1.冒泡排序 首先看一段代码 pub ... -
创建画图板窗口
2012-06-02 18:03 725//创建一个画图板窗体 //引入类和接口 ... -
接口的讲解
2012-05-19 23:36 736首先谈一下关于类的分类吧。有class类和inter ... -
继承的解析
2012-05-19 22:33 7201.什么是继承呢? 在现实中我需要定义很多的类,而实际 ... -
类与面向对象
2012-05-19 21:37 6731.面向过程与面向对象的理解 面向过程是指做一件事的经过: ...
相关推荐
链表很多同学不太理解,对此写了下链表的基本操作,头插法,对应位置修改删除等基本功能,仅提供自己学习。
实验涵盖了以下几种基本操作: 1. 查找元素:`Locate_Linklist`函数用于在链表中找到指定元素的位置,返回元素在链表中的索引。如果未找到元素,则返回0。 2. 插入元素:`insertList_after`函数允许在链表的指定位置...
链表的基本操作 C 语言程序 链表是一种基本的数据结构,它在计算机科学和软件工程中有着广泛的应用。本文将介绍链表的基本操作,包括链表的初始化、判空、打印栈的内容、入栈和出栈等操作,并提供了 C 语言程序代码...
除了上述基本操作,还有许多高级的链表操作,如反转链表、合并两个已排序链表等。这些操作都需要深入理解和熟练掌握指针的使用。 总结来说,C++中的链表是通过指针链接的数据结构,提供了一种灵活的方式存储和操作...
在这个实验“链表基本操作的实现”中,我们将深入理解链表的概念,学习如何创建、插入、删除节点,以及进行其他基本操作。 链表不同于数组,它不连续存储元素,而是通过节点间的指针链接。每个节点包含两部分:数据...
本篇文章将详细探讨堆栈链表和队列链表的基本操作。 首先,让我们了解堆栈(Stack)的概念。堆栈是一种后进先出(LIFO,Last In First Out)的数据结构,类似于日常生活中的叠盘子。在堆栈中,最后加入的元素将是第...
期末课程设计题目,使用C++实现关于链表的基本操作,本人也是学生,初学,写的不好,仅供参考。
链表是一种常用的数据...以上就是关于链表基本操作的详细讲解,包括链表的定义、创建、查找、插入和删除,以及在C语言中如何处理双向链表。这些知识是理解和实现链表算法的基础,也是许多数据结构和算法问题的起点。
接下来,我们将深入探讨链表的基本操作,链表排序以及两个链表的合并。 首先,链表的基本操作包括插入、删除和查找。在C语言中,链表由一系列节点组成,每个节点包含数据和指向下一个节点的指针。 1. 插入:在链表...
### 循环链表的基本操作与实现 #### 概述 循环链表是一种特殊的数据结构,在其中最后一个节点指向头节点,形成一个闭环。这使得在处理列表时无需判断是否达到末尾,因为总是可以从任意一个节点继续遍历下去。本...
本程序是一个关于双向链表的操作,包括插入节点,删除节点,遍历等
该资源为链表的基本操作(C++实现),包括两部分:首先是链表的基本操作(包括链表的动态创建和销毁、内存释放、节点的插入、删除、打印);其次是链表的强化操作(包括链表的整体反转、特定区间元素反转、各种链表...
本文主要探讨了链表的基本操作,包括插入结点、删除结点以及查找结点。 1. **链表结点的插入** - **在空链表中插入结点**:当链表为空时,首先需要创建一个新结点。通过`calloc()`函数动态分配内存,为新结点分配...
以上就是使用C++实现链表基本操作的方法。这些操作是链表操作的核心,掌握了它们,就能处理更复杂的链表问题,例如排序、合并等。在实际编程中,还可以考虑使用STL中的`std::list`容器,它提供了丰富的成员函数来...
线性链表的基本操作(C语言) 线性链表是一种基础数据结构,它由一系列结点组成,每个结点都包含一个数据元素和一个指向下一个结点的指针。线性链表的基本操作包括插入、删除、排序、初始化、判空、销毁、求长度等...
### 链表基本操作概览 链表是由一系列节点组成的,每个节点包含数据部分和指向下一个节点的指针。链表的操作主要围绕这些节点进行,包括创建链表、插入节点、删除节点、获取节点值以及对链表进行排序等。 #### ...