使用LinkList实现栈

栈(Stack)也是一种特殊的线性表,是一种后进先出(LIFO)的结构。
栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶(top),表头称为栈底(bottom)。
栈的物理存储可以用顺序存储结构,也可以用链式存储结构。

使用LinkList实现栈LIFO(后进先出)

代码
 
   
import java.util.LinkedList;

/**
* 使用LinkList实现栈LIFO(后进先出)
*/
public class MyStack {
private LinkedList < Object > ll = new LinkedList < Object > ();

/**
* 添加元素
*
*
@param e
*/
public void addElements(Object e) {
ll.addFirst(e);
}

/**
* 头元素出栈 对于一个栈来说,当一个将要出栈的元素出栈了,那么这个元素就在栈
* 中不存在了,所以不能使用getFirst(),而应该使用removeFirst()。
*/
public Object outElements() {
return ll.removeFirst();
}

/**
* 查看栈顶元素
*/
public Object getHeadElement() {
return ll.getFirst();
}

/**
* 判断列表是否为空
*/
public boolean empty() {
return ll.isEmpty();
}

public int getSize() {
return ll.size();
}

/**
* 判断peek()和getFirst()返回的结果是否一样
*
*
@return
*/
public boolean peekGetFirst() {
boolean bool = false ;
if (ll.peek().equals(ll.getFirst())) {
bool
= true ;
}
return bool;
}

/**
* 检索并删除此列表头 (第一个元素)元素 这里的第一个元素就是添加元素的时候的第一个。
* 如果有其它某个操作将添加时的第一个元素删除了,那么这里就会返回null
*
*
@return
*/
public Object pl() {
return ll.poll();
}

/**
* 判断remove()和poll()用法是否一样
* 肯定是返回false,没有怀疑的。
*
*
@return
*/
public boolean removePoll() {
boolean bool = false ;
if (ll.remove().equals(ll.poll())) {
bool
= true ;
}
return bool;
}

/**
* 移除第一次出现的指定元素o
* 既然有移除第一次出现的指定元素,那么当然也就有移除最后一次出现的元素的函数。
*
*
@param o
*
@return
*/
public boolean removeFirstShow(Object o) {
boolean bool = false ;
if (ll.removeFirstOccurrence(o)) {
bool
= true ;
}
return bool;
}

}

 

MyStackTest.java
 
   
public class MyStackTest {
/**
*
@param args
*/
public static void main(String[] args) {
MyStack ms
= new MyStack();

// 添加元素
ms.addElements( " a " );
ms.addElements(
" a " );
ms.addElements(
" b " );
ms.addElements(
" c " );

// 列表长度
System.out.println( " 列表长度: " + ms.getSize());

// 移除第一次出现的指定元素
System.out.println( " 移除第一次出现的指定元素: " + ms.removeFirstShow( " c " ));

// 判断列表是否真的移除第一次出现的指定元素c
// 如果比上一次少1,则说明真的成功
System.out.println( " 列表长度: " + ms.getSize());
// 头元素出栈
System.out.println( " 头元素出栈: " + ms.outElements());

// 查看栈顶元素
System.out.println( " 栈顶元素: " + ms.getHeadElement());

// 头元素出栈
System.out.println( " 头元素出栈: " + ms.outElements());

// 查看栈顶元素
System.out.println( " 栈顶元素: " + ms.getHeadElement());
// 判断列表是否为空
System.out.println( " 列表为空吗? " + ms.empty());

// 列表长度
System.out.println( " 列表长度: " + ms.getSize());

// 判断判断peek()和getFirst()返回的结果是否一样
System.out.println(ms.peekGetFirst());

// 判断remove()和poll()用法是否一样
// 毫无疑问返回false
System.out.println(ms.removePoll());

// 检索并删除此列表头 (第一个元素)元素
// 如果之前没有任何操作将第一个元素删除,那么这里将会返回c
System.out.println(ms.pl());

}
}

 

运行结果:

 
  
列表长度: 4
移除第一次出现的指定元素:
true
列表长度:
3
头元素出栈:b
栈顶元素:a
头元素出栈:a
栈顶元素:a
列表为空吗?
false
列表长度:
1
true
false
null

 

添加元素和移除元素的比较:

public boolean offer(E e)

将指定元素添加到此列表的末尾(最后一个元素)。

public void addLast(E e) 将指定元素添加到此列表的结尾。 此方法等效于add(E)

public boolean offerLast(E e)在此列表末尾插入指定的元素。

public void push(E e)将元素推入此列表所表示的堆栈。换句话说,将该元素插入此列表的开头。 此方法等效于addFirst(E)。

public boolean add(E e)

将指定元素添加到此列表的结尾。此方法等效于addLast(E)。

public void addFirst(E e)

将指定元素插入此列表的开头。

public E poll()获取并移除此列表的头(第一个元素)

public E remove()获取并移除此列表的头(第一个元素)。

public E removeFirst()移除并返回此列表第一个元素。

转载于:https://www.cnblogs.com/meng72ndsc/archive/2010/12/22/1914263.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值