java与数据结构(6)---java实现链栈
栈之链式存储结构链栈
链栈
栈的链式存储结构成为链栈。链栈是没有头结点,头结点就是栈顶指针top。
代码结构
package list;
public interface Stackable;公共接口类
public class Node;公共结点类
class LinkedStack implements Stackable;实现栈接口的链栈类
class TestLinkedStack;测试类
公共接口类
package list;
public interface Stackable<T> {
public int Length();
public boolean isEmpty();
public boolean isFull();
public boolean Push(T element);
public T Pop();
}
公共结点类
package list;
public class Node<T> {
private T data;
private Node<T> next;
Node() {
this(null,null);
}
Node(T data) {
this(data,null);
}
Node(T data, Node<T> next) {
this.data = data;
this.next = next;
}
public void setData(T data) {
this.data = data;
}
public void setNext(Node<T> next) {
this.next = next;
}
public T getData() {
return this.data;
}
public Node<T> getNext() {
return this.next;
}
public String toString() {
return getData();
}
}
实现栈接口的链栈类
//链栈实现类,链栈没有头结点,当链栈为空表时,top = null;
class LinkedStack<T> implements Stackable<T> {
private Node<T> top; LinkedStack() {
this(null);
} //建链栈,element非空引用时,建带top的链栈
LinkedStack(T element) {
if(element != null) {
top = new Node<T>(element);
}
} //获取链栈,长度
public int Length() {
if(top == null) {return 0;}
else {
int k = 0;
Node<T> temp = top;
while(temp != null) {
k++;
temp = temp.getNext();
}
return k;
}
} //当top==null时,是空栈
public boolean isEmpty() {
return top == null;
} //链栈没有满栈的概念
public boolean isFull() {return false;} //压栈
public boolean Push(T element) {
if(element == null) return false;
Node<T> node = new Node<T>(element);
node.setNext(top);
top = node;
return true;
} //弹栈
public T Pop() {
if(isEmpty()) return null;
T temp = top.getData();
top = top.getNext();
return temp;
} //重写父类toString方法
public String toString() {
if(isEmpty()) return "[ ]";
int len = Length();
Node<T> temp = top;
StringBuffer sb = new StringBuffer("[ ");
while(temp != null) {
sb.append(temp.getData()+" ");
temp = temp.getNext();
}
sb.append("]");
return sb.toString();
}
}
测试类
//*****************************************************************
//*栈之链式存储结构链栈-JAVA实现
//*@author Nora-Xie
//*@time 2013-10-06PM16:20
//*****************************************************************
package list; import list.Node; public class TestLinkedStack {
public static void main(String[] args) {
Stackable<String> stack = new LinkedStack<String>("A");
System.out.println(stack.Length());
System.out.println(stack);
stack.Push("B");
stack.Push("C");
System.out.println(stack.Length()+" "+stack);
stack.Pop();
System.out.println(stack.Length()+" "+stack);
}
}
链栈和顺序栈对比
顺序栈和链栈的插入、删除操作时间复杂度都是O(1);
顺序栈需要事先确定数组的长度,有可能存在浪费内存空间的情况;
链栈虽然不需要事先确定表长,但因为需要存储链式指针,同时加大了内存开销;
因此,如果数据元素变化不可预测,时大时小,最好使用链栈;如果它的变化空间在可控范围内,则可以考虑使用顺序栈。
java与数据结构(6)---java实现链栈的更多相关文章
- 【C#】【数据结构】006-栈:链栈
C#数据结构:链栈 1.自定义链栈结构: 链栈节点类 using System.Collections; using System.Collections.Generic; using UnityEn ...
- 数据结构(C++)——链栈
结点结构 typedef char ElemType; typedef struct LkStackNode{ ElemType data; LkStackNode *next; }*Stack,SN ...
- java与数据结构(8)---java实现链队列
链队列 实际上就是单链表,只是规定了删除在队头进行,添加在队尾进行. 链队列代码结构 package list.queue; public interface Queuable<T>; p ...
- java与数据结构(4)---java实现双向循环链表
线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...
- java与数据结构(3)---java实现循环链表
循环链表:将单链表中尾结点的指针由空指针改为指向头结点,就使整个单链表形成一个环,这种首尾相接的单链表称为单链表循环表,即循环链表. 循环链表与单链表最重要的区别是:尾结点的指针,不再是p->n ...
- java与数据结构(2)---java实现静态链表
结点类 1 //结点类 2 class Node<T> { 3 private T data; 4 private int cursor; 5 6 Node(T data, int cur ...
- 数据结构——Java实现链栈
一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 链栈是指采用链式存储结构实现的 ...
- java使用链栈实现迷宫求解
java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html java实现链栈的代码: package stackapplicatio ...
- java使用链栈实现数制转换
java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html 将前面java实现链栈的代码稍作修改: package linkedst ...
随机推荐
- [CSS3] Interactive Pseudo-Classes :link :visited :hover :active
The interactive pseudo-classes for links (and buttons) allow us to make sure the user knows what ele ...
- C#导出数据到Excel通用的方法类
导出数据到Excel通用的方法类,请应对需求自行修改. 资源下载列表 using System.Data; using System.IO; namespace IM.Common.Tools { p ...
- HashSet与HashMap
HashSet底层由HashMap实现 Hash表:存放链表表头的数组 HashSet的值存放于HashMap的key上,而HashMap的value统一为PRESENT(private static ...
- Android 面试精华题目总结
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24015867 下面的题目都是楼主在android交流群大家面试时遇到的,如果大家 ...
- 与useradd命令相关的两个默认配置文件
Configuration Files for User Management Defaults When working with tools as useradd, some defaul ...
- 【网络流#6】POJ 3041 Asteroids 二分图最大匹配 - 《挑战程序设计竞赛》例题
学习网络流中ing...作为初学者练习是不可少的~~~构图方法因为书上很详细了,所以就简单说一说 把光束作为图的顶点,小行星当做连接顶点的边,建图,由于 最小顶点覆盖 等于 二分图最大匹配 ,因此求二 ...
- spring01
spring的体系结构图 第一个spring入门例子 01.创建一 ...
- 母函数&&排列(模板)
#include <iostream> #include <algorithm> using namespace std; int main() { int n,i; int ...
- Android Activity间传值
Android中不同的Activity之间的传值方式(Main为当前Activity,Login为目标Activity) 1.使用Intent Intent intent = new Intent(M ...
- ubuntu 下源码安装Postgreql pgAdmin3
一.安装 PostgreSQL 1.安装相关依赖,在终端下执行: sudo apt-get install zlib1g-dev sudo apt-get install libreadline ...