LinkedStack各个方法的实现
2015-10-30 17:51
162 查看
@Override
public
void push(T element) {
//没有满这个问题,直接入住
//首先做一个新的节点。把对象放进去
Node node = new Node();
node.data = element;
node.next = null;
//然后接到top的后面
top.next = node;
//top应该更新
top = top.next;
//size也加1
size++;
}
同样在实现Iterator和toString方便测试
@Override
public
Iterator<T>iterator() {
return
newLinkedStackIterator<T>();
}
//从栈底开始
private
class LinkedStackIterator<T> implementsIterator<T>{
//初始第一个数据的左面。head处
Node pointer =
head;
@Override
public
boolean hasNext() {
//如果pointer后面不空,就返回true
if(pointer.next !=
null)
return
true;
else
return
false;
}
@Override
public T next() {
//返回pointer后面的节点
pointer =
pointer.next;
return
(T) pointer.data;
}
}
public String toString(){
Iterator<T> it = iterator();
StringBuilder sb =
new StringBuilder();
while(it.hasNext())
sb.append(it.next().toString()+" ");
return
sb.toString();
}
然后再实现其他的方法,如下面的。尽量每一行都加上注释。以后好看好理解啊。
@Override
public
Tpop() {
//将top所指的栈顶干掉.先找到top前面的哥们
Node beforetop =
head;
while(beforetop.next !=
top)
beforetop =
beforetop.next;
//beforetop不要top了,就把beforetop的next设置为Null.因为在扔掉之前保存一下值
Node toBeDeleted =
top;
beforetop.next =
null;
//top被扔掉了,然后top又要回栈top的位置
top =
beforetop;
//size-1
size--;
return
toBeDeleted.data;
}
@Override
public T pop() {
//非法判断
if(size==0)
try {
throw
new Exception("stack isempty");
} catch (Exception
e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
//将top所指的栈顶干掉.先找到top前面的哥们
Node beforetop =
head;
while(beforetop.next !=
top)
beforetop =
beforetop.next;
//beforetop不要top了,就把beforetop的next设置为Null.因为在扔掉之前保存一下值
Node toBeDeleted =
top;
beforetop.next =
null;
//top被扔掉了,然后top又要回栈top的位置
top =
beforetop;
//size-1
size--;
return
toBeDeleted.data;
}
其他的3个就好写了。
@Override
public T peek() {
//非法判断
if(size==0)
try {
throw
new Exception("stack isempty");
} catch (Exception
e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
//偷瞥一把top
return
top.data;
}
@Override
public
boolean isEmpty() {
if(size==0)
return
true;
else
return
false;
}
@Override
public
int size() {
return
size;
}
public
void push(T element) {
//没有满这个问题,直接入住
//首先做一个新的节点。把对象放进去
Node node = new Node();
node.data = element;
node.next = null;
//然后接到top的后面
top.next = node;
//top应该更新
top = top.next;
//size也加1
size++;
}
同样在实现Iterator和toString方便测试
@Override
public
Iterator<T>iterator() {
return
newLinkedStackIterator<T>();
}
//从栈底开始
private
class LinkedStackIterator<T> implementsIterator<T>{
//初始第一个数据的左面。head处
Node pointer =
head;
@Override
public
boolean hasNext() {
//如果pointer后面不空,就返回true
if(pointer.next !=
null)
return
true;
else
return
false;
}
@Override
public T next() {
//返回pointer后面的节点
pointer =
pointer.next;
return
(T) pointer.data;
}
}
public String toString(){
Iterator<T> it = iterator();
StringBuilder sb =
new StringBuilder();
while(it.hasNext())
sb.append(it.next().toString()+" ");
return
sb.toString();
}
然后再实现其他的方法,如下面的。尽量每一行都加上注释。以后好看好理解啊。
@Override
public
Tpop() {
//将top所指的栈顶干掉.先找到top前面的哥们
Node beforetop =
head;
while(beforetop.next !=
top)
beforetop =
beforetop.next;
//beforetop不要top了,就把beforetop的next设置为Null.因为在扔掉之前保存一下值
Node toBeDeleted =
top;
beforetop.next =
null;
//top被扔掉了,然后top又要回栈top的位置
top =
beforetop;
//size-1
size--;
return
toBeDeleted.data;
}
@Override
public T pop() {
//非法判断
if(size==0)
try {
throw
new Exception("stack isempty");
} catch (Exception
e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
//将top所指的栈顶干掉.先找到top前面的哥们
Node beforetop =
head;
while(beforetop.next !=
top)
beforetop =
beforetop.next;
//beforetop不要top了,就把beforetop的next设置为Null.因为在扔掉之前保存一下值
Node toBeDeleted =
top;
beforetop.next =
null;
//top被扔掉了,然后top又要回栈top的位置
top =
beforetop;
//size-1
size--;
return
toBeDeleted.data;
}
其他的3个就好写了。
@Override
public T peek() {
//非法判断
if(size==0)
try {
throw
new Exception("stack isempty");
} catch (Exception
e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
//偷瞥一把top
return
top.data;
}
@Override
public
boolean isEmpty() {
if(size==0)
return
true;
else
return
false;
}
@Override
public
int size() {
return
size;
}
相关文章推荐
- OC坑集: block作为函数参数
- vim使用winmanager整合nerd tree和taglist
- Linux基础命令
- linux情况下新建Tomcat
- LinkedStack的实现:类型和成员
- Xcode 【自用Xcode/mac快捷键-连载中】
- AndroidStudio安装详解
- Ignite China微软技术
- Oracle如何导出sys用户下的系统表
- unity shader 学习 (2)Vs【顶点着色器】 和 Ps【像素着色器】
- linux - 【LAMP环境配置安装注意安装步骤】 9
- QT5入门之26 -QLabel
- POJ 1160 Post Office(经典DP)
- 关于setImageState(int[] state, boolean merge)的解释以及使用方式
- maven 找不到jar包
- STM_HAL: assert_param 与 assert_failed函数
- 开源 java CMS - FreeCMS2.4字典管理
- Houdini Event Queue Full. Events being dropped:的解决方案
- Volley多次请求 RetryPolicy
- EasyUI combogrid 实现分页和数据模糊搜索