链表的实现(Java语言描述)
代码如下:
public interface ListInterface<T> {
public T getElem(int i);
public boolean insertElem(int i,T t);
public T deleteElem(int i); }
public class Node<T> {
public T data;
public Node<T> next;
public T getData(){
return data;
}
public void setData(T data){
this.data = data;
}
public Node<T> getNext(){
return next;
}
public void setNext(Node<T> next){
this.next = next;
} }
import java.io.*;
import java.util.*; public class Linklist<T> implements ListInterface<T> {
public Node<T> head;
public int length;
public Linklist(T[] at){//头插法建立单链表。
T t;
this.length = 11;
Node<T> p;
head = new Node<T>();
//head.next = null;
//Scanner scanner = new Scanner(System.in);
//T s = scanner.nextLine();
int i=0;
while(i<at.length){
t = at[i];
p = new Node<T>();
p.data = t;
p.next = head.next;
head.next = p;//头插法!
i++;
}
}
public Linklist(Node<T> head){
this.head = head;
}
public T getElem(int i){
int j = 0;
Node<T> n = head;
while(n != null){
if(j == i){
return n.getData();
}
n = n.getNext();
j++;
}
return null;
}
public boolean insertElem(int i,T t){
if(i<0 || i>length){
System.out.println("插入位置不合法!");
return false;
}else{
if(head==null && i==1){
head = new Node<T>();
head.setData(t);
length++;
return true;
}
else if(head!=null && i==1){
Node<T> tempNode = new Node<T>();
tempNode.setData(t);
tempNode.setNext(head);
head = tempNode;
length++;
return true;
}else{
Node<T> n = this.head;
int j = 1;
while(n!=null && j<i-1){
n = n.getNext();
j++;
}
Node<T> tempNode = new Node<T>();
tempNode.setData(t);
tempNode.setNext(n.getNext());
n.setNext(tempNode);
length++;
}
return true; }
}
public T deleteElem(int i){
if(head==null || i<1 || i>length){
System.out.println("删除位置不合法!");
return null;
}
T old;
if(head!=null && i==1){
old = head.getData();
head = head.getNext();
}else{
Node<T> n = this.head;
int j = 1;
while(n!=null && j<i-1){
n = n.getNext();
j++;
}
old = n.getNext().getData();
n.setNext(n.getNext().getNext());
}
length--;
return old;
}
public Node<T> getHead(){
return this.head;
}
public int getLength(){
return this.length;
}
public void setHead(Node<T> head){
this.head = head;
}
public void setLength(int length){
this.length = length;
}
public void display(){
Node<T> p;
int i = 0;
p = head.next;
while(p!=null){
System.out.print(p.data + " ");
p = p.next;
}
}
}
import java.util.*;
import java.io.*; public class LinkedlistTest { public static void main(String[] args) {
// TODO 自动生成的方法存根
Integer[] arr = new Integer[10];
Scanner scan = new Scanner(System.in);
for(int i=0; i<10; i++){
arr[i] = scan.nextInt();
}
Linklist<Integer> list = new Linklist<Integer>(arr);
list.display();
System.out.println();
System.out.println(list.getElem(5));
System.out.println(list.insertElem(5, 78));
list.display();
System.out.println();
System.out.println("要删除的元素是:"+list.deleteElem(5));
list.display(); } }
链表的实现(Java语言描述)的更多相关文章
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述) 用经典矩阵转置算法和普通的三元组矩阵转置在时间复杂度上都是不乐观的.快速转置算法在增加适当存储空间后实现快速转置具体原理见代码注释部 ...
- 数据结构(java语言描述)
概念性描述与<数据结构实例教程>大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html. 概述 基本概念及术语 数据 信息的载体,是 ...
- 数据结构(Java语言描述)-第一章:概述
第一章 概述 1.0 序言 自己为啥要学数据结构嘞,我觉得主要有以下三个原因: 前段时间在看并发编程时,发现aqs,corrunthashmap等底层都用到了数据结构,主要的有队列,还有链表,学习数据 ...
- 利用栈实现算术表达式求值(Java语言描述)
利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...
- 【数据结构】之二叉树(Java语言描述)
有关树的一些基础知识点请参考[这篇文章]. 本文主要记录Java语言描述的二叉树相关的一些操作,如创建.遍历等. 首先,我们需要一个表示树中节点的数据结构TreeNode,代码如下: public c ...
- 数据结构与抽象 Java语言描述 第4版 pdf (内含标签)
数据结构与抽象 Java语言描述 第4版 目录 前言引言组织数据序言设计类P.1封装P.2说明方法P.2.1注释P.2.2前置条件和后置条件P.2.3断言P.3Java接口P.3.1写一个接口P.3. ...
- 《数据结构与算法分析-Java语言描述》 分享下载
书籍信息 书名:<数据结构与算法分析-Java语言描述> 原作名:Data Structures and Algorithm Analysis in Java 作者: 韦斯 (Mark A ...
- 【数据结构】之链表(Java语言描述)
以前写过一篇帖子,记录了链表在C语言中的描述代码.C语言中没有链表的直接实现,因此,我们需要自己编写代码实现.请参考[我的这篇文章]. Java中默认为我们提供了链表的API—— LinkedList ...
- 数据结构--Java语言描述
本篇文章是为了记录自己在学习数据结构时的笔记,会对常见的数据结构做基本的介绍以及使用Java语言进行实现.包括 动态数组 栈 队列 链表 二分搜索树 优先队列和堆 线段树 Trie树 并查集 AVL树 ...
随机推荐
- nodejs gearman redis
export NODE_PATH=/root/gearman-1.1.2/node_modulesnpm install gearmanodenpm install redis w.js var re ...
- 禁用iOS的UIView长按默认操作
* { -webkit-touch-callout: none; -webkit-user-select: none; -webkit-tap-highlight-color: rg ...
- rocketmq总结
1:角色关系 2:顺序消息 消费消息的顺序要同収送消息的顺序一致,在 RocketMQ 中,主要挃的是尿部顺序,即一类消息为满足顺序性,必须 Producer 单线程顺序収送,丏収送到同一个队列,返样 ...
- 修改maven一更新jre就变成1.5版本
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...
- 菜鸟教程之工具使用(十二)——Eclipse突出显示选中的相同变量
大家都知道在Eclipse中,选中一个变量或者方法名(或者说是一个单词),当前文件中跟他一样的变量会被突出显示,这个功能很好用.能让我们很方便的找到该变量在哪被用到了.前段时间我的Eclipse的这个 ...
- 简单的freemarker解析测试
本文是一个很简单很基础的Freemarker模板解析测试类,复杂的也是在此基础上添加一些代码优化而来,懂得基础流程后就能融会贯通了 POM: <dependency> <groupI ...
- R语言之中文分词:实例
一.说明 网上提供的一个例子,做了修改与订正. 二.程序 #调入分词的库 library("rJava") library("Rwordseg") #调入绘制词 ...
- SAP的吐槽来源
这几天看了 梅林传奇(英国剧) , 封面是 梅林传奇的男主 对着女主 一脸无语的玩着电脑. 原来 看梅林传奇的时候,以为自己看错了,没有理会到这部剧的真谛,是自己不懂得和发现美,为了滚娘从第二季就弃了 ...
- [原创]Android系统中常用JAVA类源码浅析之HashMap
由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...
- Eclipse+Selenium自动化测试脚本设计V1.0
Eclipse+Selenium自动化测试脚本设计V1.0 http://www.docin.com/p-803032251.html