第三篇技术博客 相当的不好意思 还是没培养成写博客的习惯 看了看上一篇的时间3月13 很多感触 晚点另写一篇总结吧……
这个总结有点相当的过时了 上周就做好了但是一直没细想 现在由于学校课程正在用C实现中 思想相通 姑且把java版本的总结如下
用链表实现队列,首先思考的就是队列的常见功能:插入,添加,删除,索引查找,遍历打印,长度统计,修改.
然后就是思考如何用链表表示,链表的结构特点便是前后相连,与数组这些顺序结构相比,链表特点便是所存取的部分在内存中不连续,前一个元素对象指向下一个,这种指向关系,在C中是指针,在Java中便是引用传递,我觉得区别C与java的也就在这里。(C学的很烂,指针始终没弄明白,也没回头看,不过学JAVA时定义结点类时看到在一个结点类中定义下一个结点为属性,忽然一下就有种懂了的感觉,呵呵),所以对队列的操作便是对这些结点的各种操作,改变结点的属性。
具体实现代码如下;
首先是必须要定义好结点类滴:
public class LinkNode {
private Object obj;
private LinkNode next;
public LinkNode(Object obj){//重载构造器,传入数据
this.obj=obj;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public LinkNode getNext() {
return next;
}
public void setNext(LinkNode next) {
this.next = next;
}
}
四个方法,两个属性。
然后就可以写队列类的方法了:
首先定义两个结点:
private LinkNode root=null;
private LinkNode rear=root;
root是根节点,rear是当前结点
队列相应的操作方法就如下了:
//添加元素的方法
public void add(Object obj){//添加元素
LinkNode node=new LinkNode(obj);
if(root==null){
root=node;
rear=root;
}else{
rear.setNext(node);
rear=node;
}
}
//删除指定元素
public void remove(int index){
int count=0;
rear=root;
if(index==0){
root=root.getNext();
}
while(rear!=null&&rear.getNext()!=null){
if(count==index-1){
rear.setNext(rear.getNext().getNext());
}
count++;
rear=rear.getNext();
}
}
//返回队列长度
public int size(){
int count=0;
if(root==null){
return 0;
}else{
count++;
rear=root.getNext();
while(rear!=null){
count++;
rear=rear.getNext();
}
}
return count;
}
//返回指定元素
public Object get(int index){
int count=0;
if(index<0||index>=size()){
throw new RuntimeException();
}
else{
rear=root;
while(rear!=null){
if(count==index){
return rear.getObj();
}
else{
count++;
rear=rear.getNext();
}
}
}
return null;
}
//指定位置插入元素
//此处是用后插法
public void insert(int index,Object obj){
int count=0;
rear=root;
LinkNode node=new LinkNode(obj);
while(rear!=null&&rear.getNext()!=null){
if(count==index){
node.setNext(rear.getNext());
rear.setNext(node);
}
count++;
rear=rear.getNext();
}
if(rear!=null&&rear.getNext()==null){
if(count==index){
rear.setNext(node);
}
}
}
//修改指定元素
public void modify(int index,Object obj){
int count=0;
if(index<0||index>=size()){
throw new RuntimeException();
}
else{
rear=root;
while(rear!=null){
if(count==index){
rear.setObj(obj);
// break;
}
count++;
rear=rear.getNext();
}
}
}
//打印整个队列
public void printLinkList(){
rear=root;
while(rear!=null){
Object obj=rear.getObj();
System.out.println(obj);
rear=rear.getNext();
}
}
总体感觉,写的这些方法都很类似。都是要沿头结点向后查找,如果索引值与计数的count相等,则执行相应删除,修改或添加操作,重要的便是如何调用结点类的四个方法,尤其是后两个setNext()和getNext(),使链表始终保持连接而不中断……
思路是第一位的,明确要实现的功能,再按难易和必要性分块,一步步实现,具体到代码就是分块的执行循环,赋值等基本操作,判断条件的选定,整体模块的调用,呵呵 这是最近写代码的感受 。
还是要交流才能进步的快,写出来,感觉挺舒服,错误欢迎指正,感激不尽………嘿嘿 加油
分享到:
相关推荐
个人感觉这题关键是注意指针的指向,可以定义一个first对象(值为-1,主要用于返回操作后的链表),first.next指向head,定义一个last同样指向first(主要用于操作记录要删除节点的前一个节点),定义一个p指向head...
对于JAVA程序员来说,面试不仅是进入心仪公司的门槛,更是展示自身技术实力和个人魅力的重要环节。然而,许多求职者在面对面试时常常感到无所适从,缺乏有效的准备策略。本文旨在通过对《JAVA程序员面试笔试真题库》...
总结起来,约瑟夫问题是一个经典的问题,其Java解决方案利用了双链表数据结构的优势,提供了高效且简洁的代码实现。通过学习这种实现,我们可以提升对链表操作、循环和条件判断等编程概念的理解,同时也可以锻炼解决...
### Java编程与数据结构简介 #### 一、书籍概述 《Java编程与数据结构简介》是...总之,《Java编程与数据结构简介》是一本内容丰富、讲解详尽的专业教材,无论是对于个人学习还是课堂教学都是非常有价值的参考资料。
本实验主要探讨了线性表在Java环境下的两种实现方式:顺序表和单链表,并通过实现一系列基本操作来加深理解。 1. **顺序表**: 顺序表是线性表的一种静态存储方式,它将所有元素存储在一块连续的内存区域中。在Java...
根据给定文件的部分内容,我们可以总结出以下几个关键的Java编程知识点: ### 1. 对一个 n×n 矩阵进行排序 #### 目标 编写一个程序,使得一个 n×n 的矩阵按照每行元素的平均值进行递增排序。 #### 实现思路 1. ...
该任务要求设计一个模拟通讯录,它是一个数据结构的实现,用于存储个人联系信息,如姓名、电话、邮箱等。通讯录需要支持四种基本操作:插入新联系人、删除现有联系人、更新联系人信息以及查找特定联系人。这些功能都...
链表分为单链表、双链表和循环链表等多种形式,这里我们主要讨论单链表,因为它在实现学生信息管理系统时最为常见。 在学生信息管理系统中,我们可以创建一个节点类,包含学生的个人信息字段和一个指向下一个节点的...
管理系统——通讯录是一种用于存储和管理个人信息的工具,尤其在IT行业中,通讯录通常被设计成数据结构的形式,便于高效地进行查找、删除和排序等操作。在这个案例中,使用了链表作为基础数据结构来实现这个功能。...
总结来说,这个实验报告详细介绍了顺序表和单链表这两种线性表的实现方式,并通过具体的应用场景——约瑟夫环问题和排序单链表,展示了它们在实际问题中的运用。同时,实验也强调了编写程序和理解数据结构特点的重要...
总结来说,"LeetCodeSolutionsInJava"项目不仅提供了LeetCode问题的Java解决方案,更是一个学习和实践Java编程、算法和数据结构的宝贵资源。通过研究这些解决方案,开发者可以深入理解Java语言特性,熟练掌握常见...
根据提供的文件信息,我们可以归纳总结出一系列与计算机二级等级考试相关的知识点。这些知识点涉及数据库管理、网络基础、算法与数据结构、编程语言基础、办公软件使用等多方面内容。 ### 数据库管理 1. **修改...
以上是对各家公司软件测试工程师面试经验的总结,涵盖了技术面试和HR面试的主要知识点。通过这些经验分享,可以帮助求职者更好地准备面试,提高成功率。同时,也可以作为参考,了解当前市场上软件测试工程师岗位的...
7. **源程序分析**:报告中附带的源程序可能包括上述数据结构的C++或Java实现,每个数据结构的插入、删除、查找等操作的代码会被详细解析,帮助理解其实现机制。 8. **性能分析**:对每种数据结构的操作进行时间...
LeetCode的题库覆盖了多种编程语言,如Java、Python、C++等,题目类型多样,包括但不限于数组、链表、字符串、栈、队列、二叉树、图、哈希表、回溯、动态规划等。这些题目不仅能够帮助程序员巩固基础,还能挑战高级...
例如,在“leetcode_answer-master”目录下,每个子文件或子文件夹对应一个LeetCode的题目,里面包含不同语言(如Python、Java、C++等)的解决方案。这种结构便于开发者根据需求快速定位到特定题目,对比不同实现,...
"OwnAlgorithmNotes"是一份个人精心整理的算法学习资料,旨在帮助读者深入理解并掌握各种算法,提高解决实际问题的能力。这份笔记不仅包含了作者在刷题过程中的心得体验,还提供了详细的解题策略和思路,为读者提供...
1. **何谓PC**:个人计算机(Personal Computer)是基于微处理器的计算机系统,用户可以直接与其交互。 2. **图灵机与冯氏架构**:图灵机是理论计算机科学中的理想化模型,而冯·诺依曼架构则是现代计算机硬件的...