//节点对象
package stack;
public class LinkNode<T> {
private T date;
private LinkNode next;
public T getDate() {
return date;
}
public void setDate(T date) {
this.date = date;
}
public LinkNode getNext() {
return next;
}
public void setNext(LinkNode next) {
this.next = next;
}
}
//实现类
package stack;
public class LinkedStack<T> {
//栈底指针
private LinkNode base;
//栈顶指针
private LinkNode top;
//栈的当前大小
private Integer size;
/**
* 栈的初始化
*/
public void InitStack() {
top = base = new LinkNode();
size = 0;
}
/**
* 获取栈的大小
*/
public int StackLenth() {
return this.size;
}
/**
* 获取栈顶元素
*/
public T GetTop() {
return (T) top.getDate();
}
/**
* 入栈
*/
public void Push(T e) {
LinkNode<T> newNode = new LinkNode<T>();
newNode.setDate(e);
top.setNext(newNode);
top = newNode;
size++;
}
/**
* 出栈
*/
public T Pop() {
if (base==top){
return null;
}
T e=(T) top.getDate();
size--;
LinkNode nowNode=base;
while (nowNode.getNext().getNext()!=null){
nowNode=nowNode.getNext();
}
nowNode.setNext(null);
top=nowNode;
return e;
}
/**
* 获取指定位置的链表中的元素
*/
public T getLocateElem(int i){
LinkNode nowNode=base;
int j=1;
while (nowNode!=null&&nowNode.getNext()!=null){
nowNode=nowNode.getNext();
if (i==j){
return (T) nowNode.getDate();
}
j++;
}
return null;
}
/**
* 遍历栈
*/
public void print(){
for (int i = size; i >0 ; i--) {
System.out.print(this.getLocateElem(i));
}
System.out.println();
}
}
//测试
package test;
import stack.LinkedStack;
public class LinkedStackTest {
public static void main(String[] args) {
LinkedStack<Integer> linkedStack=new LinkedStack();
linkedStack.InitStack();
linkedStack.Push(1);
linkedStack.Push(2);
linkedStack.Push(3);
linkedStack.print();
int size=linkedStack.StackLenth();
for (int i = 0; i < size; i++) {
System.out.println(linkedStack.Pop());
}
}
}
java栈的实现(链表型)
猜你喜欢
转载自blog.csdn.net/qq_20009015/article/details/80723652
今日推荐
周排行