链表的实现(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树 ...
随机推荐
- ZPL打印中文信息
博客来源:http://www.cnblogs.com/Geton/p/3595312.html 相信各位在实际的项目中,需要开发打条码模块的也会有不少,很多同行肯定也一直觉得斑马打印机很不错,但是Z ...
- 【CUDA学习】GPU硬件结构
GPU的硬件结构,也不是具体的硬件结构,就是与CUDA相关的几个概念:thread,block,grid,warp,sp,sm. sp: 最基本的处理单元,streaming processor 最 ...
- CSS等高布局
做一些后台项目,和一下带侧边栏项目的时候登高布局很常用,总结了下有几种 1.margin-bottom方法 这里直接介绍我认为的最佳的侧边栏/分栏高度自动相等方法.核心的CSS代码如下(数值不固定): ...
- java/.net-常用工具下载地址&常用学习网址&快捷键
HTML5 HTML5:http://www.html5cn.org/ php常用网址 thinkphp框架:http://www.thinkphp.cn/ wampserver开发服务器:http: ...
- netsh-winsock-reset;ping的通公网IP和DNS地址和内网网关,就是不能解析域名;
winXP cmd-------------> netsh winsock reset ============= 相关知识: netsh winsock reset命令含义是重置 Winsoc ...
- ISO/IEC 9899 C语言标准(非官方翻译)
本系列博文将以ISO/IEC 9899最新的官方手册为准,然后再添加GCC以及Clang编译器对标准的扩展. 本系列博文将不仅仅是针对C编程语言(C Programming Language)标准的翻 ...
- 解决微信浏览器无法使用reload()刷新页面
场景是这样子的,页面在初始化时有一个ajax请求,在页面上有一个按钮,点击的时候执行window.location.reload(),正常情况reload()后页面依然会向后台发出请求,但在安卓的微信 ...
- HashSet HashTable HashMap的区别 及其Java集合介绍
(1)HashSet是set的一个实现类,hashMap是Map的一个实现类,同时hashMap是hashTable的替代品(为什么后面会讲到). (2)HashSet以对象作为元素,而HashMap ...
- WPF WebBrowser屏蔽弹出alert ,confirm ,prompt ,showModalDialog() ,window.open()
WPF WebBrowser屏蔽弹出alert ,confirm ,prompt ,showModalDialog() ,window.open()添加Microsoft.mshtml.dll,然后写 ...
- 如何导入大sql文件到虚拟主机mysql数据库
大部分网站虚拟主机为了安全起见,都限制了通过命令或者phpMyAdmin导入大sql文件到mysql数据库,例如godaddy只允许站长通过phpMyAdmin上传不超过2m的sql文件,但实际上我们 ...