123

项目4 线性表的链式结构算法设计
 
【实验目的】
1、掌握线性表的链式结构定义;
2、掌握线性表的链式操作,如建立、查找、插入和删除等。
【实验内容】
1、定义链式数据结点;
2、定义线性表的链式结构。
3、实现链式的查找、计算长度、插入新结点、删除结点、显示所有结点信息等。
【实验参考代码】
请回答:
package com;
public class LinkNode { //单链表的结点

String key;      //结点的关键字	
int data;        //结点的数据值	
LinkNode nextNode;  //指向下一个结点	

public LinkNode( LinkNode node){    
	this.nextNode = node;
}
	
public LinkNode(String key , int data ){
	this.key = key;
	this.data=data;
	this.nextNode = null;
}

}

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

package com;
public class LinkList {

LinkNode head;   // 创建 单链表的 头结点

public LinkList() {   //单链表的构造方法

	head = new LinkNode(null);  //new一个头结点,头结点指针域为null
}

public int AddNode(String key, int data) {  //添加新结点 

	LinkNode node, htemp; //引入临时变量  LinkNode node, htemp

node = new LinkNode(key, data); //创建一个新结点 node

if (node == null) { //判断 node是否创建,如果node为null则不存在

	System.out.print("创建新结点node失败!\n");

	} 

else {

if (head.nextNode == null) {   // 首次插入第一个结点,对头结点指针域是否为

// 空进行判断,如果为空,则进行插入新结点。

	head.nextNode = node;    //把第一个结点放到 头结点后面,

//令头结点指针域指向第一个新结点node
System.out.println(“成功添加新结点 !”);

	return 1;      //插入成功,返回为1;
}

	htemp = head; // 把头结点赋值为 htemp,从而找到单链表起始位置

while (htemp.nextNode != null) { // 根据当前结点的指针域nextNode不为空,利用
//循环,找到 单链表中 上一次插入的最后一个结点

htemp = htemp.nextNode; //提取当前结点的指针域nextNode的值,重新赋值给 htemp

}
htemp.nextNode = node; // 插入新结点

}
return 1; //返回 1

}

public int getLength() {  //方法的功能:获取单链表的总长度,多少个结点
	int j = 0;         //变量 j 存储 结点总个数,初始值为0 
	
	LinkNode htemp; //创建临时变量LinkNode htemp
	htemp = this.head; //把当前链表头head赋值给 htemp,从而获取链表

	while (htemp.nextNode != null) {   //判断当前结点的nextNode是否为空,以便确定下一个结点是否存在。如果不为空,说明下一个结点是存在的,则j自动加1
		j++;  //j记录统计的总个数
		htemp = htemp.nextNode;//提取当前结点的指针域的值,赋值给htemp,以便 获取下一个结点,进而利用循环,统计总的结点个数
	}

	System.out.println("当前链表长度是 :" + j);
	return j;  //返回 j值
}

public void GetAll() {   //在终端输出每一个结点的内容。
	LinkNode htemp; //创建临时变量LinkNode htemp
	htemp = this.head; //把当前链表头head赋值给 htemp,从而获取链表

while (htemp.nextNode != null) {//判断当前结点的nextNode是否为空,以便确定下一个结点是否存在。如果不为空,说明下一个结点是存在的,从而可以读取结点
System.out.println("链表的所有元素以此是 :【 key: " + htemp.nextNode.key + " ,data " + htemp.nextNode.data + " ]、 ");//提取结点的内容,在终端输出
htemp = htemp.nextNode; //提取当前结点的指针域的值,赋值给htemp,以便 获取下一个结点, 如果下一个结点为空,则停止循环,否则,玖可以找到下一个结点了。
}
}

public void GetLocateList( int i ){   //找到指定位置的结点
	LinkNode htemp =head; //把当前链表头head赋值给 htemp,从而获取链表
	int j = 0; //记录的是 定位到 要查找的那个结点的前一个结点 
	while (htemp.nextNode != null && j<i) {
		htemp = htemp.nextNode; //提取当前结点的指针域 赋值给htemp
                                     //从而 获取下一个结点
		j++;  //记录已经访问过的结点个数,但不超过要找的那个结点位置
	}
	
	if(j==i) 
		System.out.println("该指定位置的结点值是 :"+htemp.data);
	else 
		System.out.println("不好意思,没有找到 。");
}

}

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
package com;
public class test {
public static void main(String[] args) {
LinkList linklist = new LinkList(); //创建单链表
System.out.println(“初始化了链表,”+“长度是:0”);

	linklist.AddNode( "001",10 ); // 为单链表插入新结点
	linklist.AddNode( "002",20 );
       linklist.AddNode( "003",30 );
	linklist.getLength();       //获取单链表的长度
	linklist.GetAll();    //显示单链表中所有结点元素内容 
       
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值