博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[数据结构]Java 基于链表和泛型的栈结构
阅读量:6463 次
发布时间:2019-06-23

本文共 2997 字,大约阅读时间需要 9 分钟。

大致测试了下 似乎没问题、姑且不管效率问题、仅仅演示逻辑、仅以记录、

1 package com.study;   2   3 import java.util.EmptyStackException;   4 import java.util.Stack;   5   6 class Linked
{
7 private Linked
before = null; // 前驱 8 private Linked
after = null; // 后继 9 private T obj; 10 11 public boolean hasNext() {
12 return after != null; 13 } 14 15 public boolean hasLast() {
16 return null != before; 17 } 18 19 public Linked
getBefore() {
20 return before; 21 } 22 23 public void setBefore(Linked
before) {
24 this.before = before; 25 } 26 27 public Linked
getAfter() { 28 return after; 29 } 30 31 public void setAfter(Linked
after) { 32 this.after = after; 33 } 34 35 @Override 36 public int hashCode() { 37 final int prime = 31; 38 int result = 1; 39 result = prime * result + ((obj == null) ? 0 : obj.hashCode()); 40 return result; 41 } 42 43 @Override 44 public boolean equals(Object obj) { 45 if (this == obj) 46 return true; 47 if (obj == null) 48 return false; 49 if (getClass() != obj.getClass()) 50 return false; 51 Linked other = (Linked) obj; 52 if (this.obj == null) { 53 if (other.obj != null) 54 return false; 55 } else if (!this.obj.equals(other.obj)) 56 return false; 57 return true; 58 } 59 60 public T getObj() { 61 return obj; 62 } 63 64 public void setObj(T obj) { 65 this.obj = obj; 66 } 67 68 public Linked(T obj) { 69 this.obj = obj; 70 } 71 } 72 73 public class StackDemo2
extends Stack
{ 74 75 private Linked
item = null; // 最后一个元素 76 private int position = -1; 77 78 @Override 79 public K push(K item) { 80 // TODO Auto-generated method stub 81 if (null == this.item) { 82 this.item = new Linked
(item); 83 } else { 84 Linked
tmp = new Linked
(item); 85 this.item.setAfter(tmp); 86 tmp.setBefore(this.item); 87 this.item = tmp; 88 } 89 position++; 90 return item; 91 } 92 93 @Override 94 public synchronized K pop() { 95 if (this.empty()) 96 throw new EmptyStackException(); 97 K item = this.item.getObj(); 98 99 this.item.setObj(null); 100 this.item = this.item.getBefore(); 101 this.item.setAfter(null); 102 103 position--; 104 105 return item; 106 } 107 108 @Override 109 public synchronized K peek() { 110 if (this.empty()) 111 throw new EmptyStackException(); 112 113 return this.item.getObj(); 114 } 115 116 @Override 117 public boolean empty() { 118 // TODO Auto-generated method stub 119 return this.item == null || this.item.getObj() == null; 120 } 121 122 @Override 123 public synchronized int search(Object o) { 124 return getIndex(o, this.item, 0); 125 } 126 127 private int getIndex(Object o, Linked
L, int inx) { 128 if (L.getObj().equals(o)) 129 return position - inx + 1; 130 131 if (L.hasLast()) 132 return getIndex(o, L.getBefore(), inx + 1); 133 134 return -1; 135 } 136 }

转载于:https://www.cnblogs.com/ForDream/archive/2012/01/29/2331262.html

你可能感兴趣的文章
VC++获得微秒级时间的方法与技巧探讨(转)
查看>>
HDOJ-1010 Tempter of the Bone
查看>>
MySQL my.cnf参数配置优化详解
查看>>
JavaNIO基础02-缓存区基础
查看>>
日本开设无人机专业,打造无人机“人才市场”
查看>>
190行代码实现mvvm模式
查看>>
PXE部署实例
查看>>
cobbler初探------实现自动安装centos6.4
查看>>
Android Studio 2.0 preview3 BUG
查看>>
兼容几乎所有浏览器的透明背景效果
查看>>
Go语言4
查看>>
jeesite 框架搭建与配置
查看>>
Adb移植(一)简单分析
查看>>
Linux VNC server的安装及简单配置使用
查看>>
阿里宣布开源Weex ,亿级应用匠心打造跨平台移动开发工具
查看>>
Android项目——实现时间线程源码
查看>>
招商银行信用卡重要通知:消费提醒服务调整,300元以下消费不再逐笔发送短信...
查看>>
python全栈_002_Python3基础语法
查看>>
C#_delegate - 调用列表
查看>>
交换机二层接口access、trunk、hybird三种模式对VLAN的处理过程
查看>>