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

沈阳网站制作平台/谷歌广告联盟

沈阳网站制作平台,谷歌广告联盟,三水网站制作,设计工作室起名完整的代码地址为:github 点击查看 单链表 单链表包括数据域和指向下一个节点的指针域,其结构如上图所示 首先定义一个数据类: class DATA{ //定义链表的一个节点String key; //节点的关键字String name;int age; }定…

完整的代码地址为:github  点击查看

单链表

单链表包括数据域和指向下一个节点的指针域,其结构如上图所示

首先定义一个数据类:

class DATA{           //定义链表的一个节点String key;           //节点的关键字String name;int age;
}

定义一个单向链表类(包括以下几种方法):

1:在尾部添加节点

2:在头部添加节点

3:查找节点

4:插入节点

5:删除节点

6:计算链表长度

7:显示所有节点对应的代码如下

public class Link {     //定义链表结构DATA nodeData = new DATA();     //声明一个节点Link nextNode;                                //指向下一个节点的指针//添加节点Link linkAddEnd(Link head, DATA nodeData){Link node, hTemp;if( (node = new Link()) ==null)        //如果内存空间分配失败,则返回为空{System.out.println("内存空间分配失败!");return null;}else{node.nodeData = nodeData;node.nextNode = null;if(head == null)      //如果头节点为空,则把当前节点赋给head,并返回{head = node;return head;}      hTemp = head;       //如果头节点不为空while(hTemp.nextNode!=null)        //查找链表的末尾{hTemp = hTemp.nextNode;}hTemp.nextNode = node;return head;}}//插入头节点Link linkAddFirst(Link head, DATA nodeData){Link node;if((node=new Link()) == null ) //如果内存空间分配失败,则返回为空{System.out.println("内存分配失败");return null;}else{node.nodeData = nodeData;node.nextNode = head;head = node;return head;}}//查找节点Link linkFindNode(Link head, String key){Link hTemp;hTemp = head;while(hTemp!=null)       //若节点有效,则进行查找{if(hTemp.nodeData.key.compareTo(key) == 0) //若节点的关键字与传入的关键字相同{return hTemp;}hTemp = hTemp.nextNode;     //处理下一个节点}return null;	}//插入节点Link linkInsertNode(Link head, String findKey,DATA nodeData){Link node,hTemp;if((node = new Link() ) == null ) //分配内存失败,则返回{System.out.println("分配内存失败...");return null;}node.nodeData = nodeData;      //保存当前集节点信息hTemp = linkFindNode(head, findKey);      //查找要插入的节点if(hTemp != null){node.nextNode = hTemp.nextNode;hTemp.nextNode = node;}else{System.out.println("未找到正确的插入位置.........");}return head;          //返回头引用}//删除节点int linkDeleteNode(Link head, String key){Link node,hTemp;hTemp = head;node = head;while(hTemp != null ){if(hTemp.nodeData.key.compareTo(key) == 0)   //若找到关键字,则删除{node.nextNode = hTemp.nextNode;hTemp = null;return 1;}else               //跳到下一个节点{node = hTemp;hTemp = hTemp.nextNode;}}return 0;}//计算链表长度int linkLength(Link head){Link hTemp;hTemp = head;int num = 0;while(hTemp!=null){num ++ ;hTemp = hTemp.nextNode;}return num;	}//显示所有节点void linkShow(Link head){Link hTemp;DATA nodeData;hTemp = head;System.out.printf("当前链表共有 %d 个节点,链表所有的数据如下:\n" , linkLength(head));while(hTemp!=null){nodeData = hTemp.nodeData;     //获取当前的节点数据System.out.printf("节点(%s %s  %d)\n",nodeData.key,nodeData.name,nodeData.age);hTemp = hTemp.nextNode;}}}


编写测试类:

public class linkTest {public static void main(String[] args) {Link node = null , head=null;Link link = new Link();String key, findKey;Scanner input = new Scanner(System.in);System.out.printf("链表测试开始,先输出链表中的数据,格式为:关键字	姓名	年龄\n");do{                        //循环插入节点,知道输入的key 为0 结束DATA nodeData = new DATA();nodeData.key = input.next();if(nodeData.key.equals("0")){break;}else{nodeData.name = input.next();nodeData.age = input.nextInt();head = link.linkAddEnd(head, nodeData);  //在链表尾部添加节点}}while(true);link.linkShow(head);     //显示所有节点System.out.printf("\n演示插入节点,输入插入位置的关键字:");findKey = input.next();                //输入插入的关键字System.out.println("输入插入节点的数据(关键字 姓名 年龄)");DATA nodeData = new DATA();              //输入节点的元素值nodeData.key = input.next();nodeData.name = input.next();nodeData.age = input.nextInt();head = link.linkInsertNode(head, findKey, nodeData);           //调用插入函数link.linkShow(head);    //显示所有节点System.out.println("演示删除节点,输入要删除的关键字:");key = input.next();link.linkDeleteNode(head, key);         //调用删除节点的函数link.linkShow(head);                     //显示所有节点System.out.println("演示在链表中差找,输入要查找的关键字:");key = input.next();node = link.linkFindNode(head, key);  //调用查找函数,返回节点引用if(node!=null){nodeData = node.nodeData;         //获取节点的数据System.out.printf("关键字 %s 对应的节点数据为 (%s %s %s)\n", key,nodeData.key,nodeData.name,nodeData.age);}else{System.out.printf("在链表中为查找的为%s 的关键字 \n" , key);}}}


双向链表

链结点的结构:

┌────┬────┬────────┐

│data│next│previous│

└────┴────┴────────┘

结构图如下:



package Link;import java.util.Scanner;class Data{           //定义链表的一个节点String key;           //节点的关键字,唯一String name;int age;
}public class DoubleLink {int flag; //输入选择值Scanner scan = new Scanner(System.in);Data data = new Data();DoubleLink nextNode;  //后继节点DoubleLink priorNode;    //前驱节点//链表添加节点DoubleLink addNode(DoubleLink head, String priorKey, String nextKey, Data nodeData){DoubleLink node=null, htemp=null;if((node = new DoubleLink()) == null)System.out.println("内存空间分配失败");if(head== null)        //如果head为空{System.out.println("当前链表为空,是否将当前节点当作头节点?\n0:否\t1:是");node.data=nodeData;node.nextNode=null;node.priorNode=null;flag = scan.nextInt();switch(flag){case 0:break;case 1:head=node;break;default:System.out.println("你输入的数据不合法");;}}       //如果head不为空else{if(linkFindNode(head, priorKey,nextKey,nodeData))System.out.println("插入成功");elseSystem.out.println("插入失败(原因可能是你输入的前驱和后继即诶但均不存在)");}return head;}//查找并插入节点boolean linkFindNode(DoubleLink head, String priorKey, String nextKey,Data nodeData) {// TODO Auto-generated method stubDoubleLink htemp=null,node=null;if( (node = new DoubleLink()) == null ){System.out.println("内存分配失败");return false;}//将传进来的值赋值给nodenode.data = nodeData;node.nextNode = null;node.priorNode=null;//两大类情况htemp = head;while(htemp != null){if(htemp.data.key.equals(priorKey)) //前驱节点存在{if(htemp.nextNode == null)     //该节点的后继节点为空,说明该节点为头节点{System.out.println("你输入的后继节点不存在,前驱节点为头节点,是否插入在其后面?\n 1:是 \t 0 :否 ");flag = scan.nextInt();if(flag == 0)break;else if(flag==1){htemp.nextNode = node;       //将查找到的节点的后继节点指向nodenode.nextNode = null;node.priorNode = htemp;return true;}elseSystem.out.println("你输入的数字不合法!!!");}else             //后继节点不为空{if(htemp.nextNode.data.key.equals(nextKey))            //存在的后继节点与nextKey相同。相同执行if{node.nextNode = htemp.nextNode;htemp.nextNode.priorNode = node;htemp.nextNode = node;node.priorNode = htemp;return true;}else         //不同执行else{htemp = htemp.nextNode; //若当前节点没找到,遍历下一个节点}}}else //前驱节点不存在,后驱节点存在{if(htemp.data.key.equals(nextKey))      //如果当前节点与nextKey相同{if(htemp.nextNode==null)  //如果后继节点为空,即当前节点为尾节点{System.out.println("你输入的前驱节点不存在,后继节点为头节点,是否插入在其前面?\n 1:是 \t 0 :否 ");flag = scan.nextInt();if(flag == 0)break;else if(flag==1){htemp.priorNode = node;node.nextNode = htemp;node.priorNode=null;return true;}elseSystem.out.println("你输入的数字不合法!!!");}else //如果当前节点的后继节点不为空,则执行下一个节点{htemp = htemp.nextNode; //若当前节点没找到,遍历下一个节点}}elsehtemp = htemp.nextNode; //若当前节点没找到,遍历下一个节点}}return false;}//输出节点public void OutputLinkNode(DoubleLink head){if(head == null)System.out.println("当前链表为空");else{System.out.println("输入的链表数据如下:");DoubleLink htemp;htemp = head;while(htemp!=null){System.out.println(htemp.data.key + "\t" + htemp.data.name + "\t" + htemp.data.age);htemp= htemp.nextNode;}}System.out.println();}//输出链表的深度int LinkDepth(DoubleLink head){int sum = 0;DoubleLink htemp = head;while(htemp!=null){sum ++;htemp = htemp.nextNode;}return sum;}//查找节点DoubleLink FindLink(DoubleLink head, String findKey){DoubleLink htemp=head;while(htemp!=null){if(htemp.data.key.equals(findKey))return htemp;htemp = htemp.nextNode;}return null;}//删除节点DoubleLink DeleteNode(DoubleLink head, String deleteKey){DoubleLink htemp = head;while(htemp!=null){if(htemp.data.key.equals(deleteKey)){if(htemp.priorNode==null)  //如果是头节点{return htemp.nextNode;}else if (htemp.nextNode==null)     //如果是尾节点{htemp.priorNode.nextNode=null;htemp.priorNode=null;return head;}else //如果是中间{htemp.priorNode.nextNode=htemp.nextNode;htemp.nextNode.priorNode = htemp.priorNode;return head;}}elsehtemp = htemp.nextNode;}	System.out.println("你要删除的节点不存在!");return head;}}

测试实现:

package Link;import java.util.Scanner;public class DoubleLinkTest {public static void main(String[] args) {DoubleLink node=null, head=null;DoubleLink dlink = new DoubleLink(); //声明一个双向链表对象Scanner scan  = new Scanner(System.in);System.out.println("双向链表测试开始....");do{System.out.println("请输入插入节点的关键字,姓名和年龄,格式为:关键字	姓名	年龄");Data data = new Data();data.key = scan.next();data.name = scan.next();data.age = scan.nextInt();if(data.key.contains("0"))  //循环插入节点,直到插入的为0时结束break;else{System.out.println("请输入插入节点的前驱节点和后继节点,格式为 前驱节点  后继节点");String priorKey = scan.next();String nextKey = scan.next();head = dlink.addNode(head, priorKey, nextKey, data);   //添加节点 dlink.OutputLinkNode(head);   //输出链表}}while(true);//输出链表的深度System.out.println("该链表的深度为:" + dlink.LinkDepth(head));//查找链表中的某个节点System.out.println("请输入要查找的节点的关键字...");String findKey = scan.next();node = dlink.FindLink(head, findKey);if(node==null)System.out.println("你所查找的节点不存在!");elseSystem.out.println("该节点的值为:" + node.data.key + "\t" + node.data.name + "\t" + node.data.age);//删除节点值System.out.println("请输入要删除的节点的关键字...");String deleteKey = scan.next();node =  dlink.DeleteNode(head, deleteKey);if(node == null)System.out.println("删除节点后的链表为空,其深度为:" + 0);else{System.out.println("删除后的链表为:");dlink.OutputLinkNode(head);System.out.println("删除节点后链表的深度为:" + dlink.LinkDepth(head));}}
}

结果展示


http://www.lbrq.cn/news/1600021.html

相关文章:

  • 搭建论坛网站/百度助手下载
  • 做网赌网站怎么推广拉人/杭州seo推广服务
  • 中国4a广告公司有哪些/东莞seo推广
  • 廊坊怎么做网站/北京刚刚宣布比疫情更可怕的事情
  • 企业网站建设的常见流程/广东百度推广的代理商
  • 网站建设狼雨/海淀网站建设公司
  • 做搞基视频网站/推广营销app
  • 电商网站网址大全/关键字挖掘
  • 武冈 网站建设/app推广文案
  • 毕节市建设厅网站/百度搜索广告怎么收费
  • 重庆网站设计方案/公司软文代写
  • 做的好的ppt下载网站/百度站长收录提交入口
  • 网站怎么做发送邮件的超链接/东莞seo建站公司哪家好
  • 后台更改公司网站背景图片/百度推广手机版
  • 影视网站怎么做app/5118大数据平台官网
  • wordpress 本地运行慢/郑州网络seo公司
  • 微网站建设开发/推广方案设计
  • 苏州专业做网站/爱站网seo工具包
  • 一流的商城网站建设/台州网站建设方案推广
  • 微知微网站建设实训平台/朋友圈广告推广文字
  • 浙江做网站公司/百度一下网页版浏览器
  • 网站设计的流程简答题/天津seo优化公司
  • 专业网站设计专业服务/seo排名方案
  • 效果好企业营销型网站建设/数据交换平台
  • 企业做网站哪家好/济南新站seo外包
  • 淮南市住房与城乡建设部网站/百度首页纯净版
  • asp 网站路径泄露 解决/嘉兴关键词优化报价
  • 免费企业网站程序上传/武汉seo技术
  • 网站做报表/高清视频网络服务器
  • 上海网站建设公司推荐排名/bing搜索引擎入口官网
  • Linux开发利器:探秘开源,构建高效——基础开发工具指南(下)【make/Makefile】
  • 水面垃圾清扫船cad【6张】三维图+设计说明书
  • Prometheus-3--Prometheus是怎么抓取Java应用,Redis中间件,服务器环境的指标的?
  • 深入浅出 RabbitMQ:工作队列实战(轮训策略VS公平策略)
  • linux下docker安装ollama
  • LLM - 智能体工作流设计模式