赞
踩
1、什么是栈
栈(Stack)是一种线性存储结构,它具有如下特点:
(1)栈中的数据元素遵守”先进后出”(First In Last Out)的原则,简称FILO结构。
(2)限定只能在栈顶进行插入和删除操作。
2、栈的基本操作
栈主要有以下几种基本操作:
(1)empty(): 如果栈为空返回true,否则返回false;
(2)size(): 返回栈内元素的大小;
(3)push(): 向栈内压入一个成员;
(4)pop(): 从栈顶弹出一个成员;
3、具体代码(我们使用链表来完成基本操作,并且使用java迭代器的功能)
- package cn.itcast.algorithm.stack;
-
- import java.util.Iterator;
-
- public class Stack<T> implements Iterable<T>{
- //首结点
- private Node head;
- //栈中元素的个数
- private int N;
-
- public class Node{
- T data;
- Node next;
- public Node(T data,Node next){
- this.data=data;
- this.next=next;
- }
- }
-
- //构造方法
- public Stack(){
- this.head=new Node(null,null);
- this.N=0;
- }
-
- //判断当前栈的元素个数是否为0
- public boolean isEmpty(){
- return N==0;
- }
-
- //获取栈中元素个数
- public int size(){
- return N;
- }
-
- //把t元素压入栈(相当于链表的头插法)
- public void push(T t){
- //首结点指向的第一个元素
- Node first=head.next;
- Node newNode = new Node(t, null);
- //首结点指向新结点
- head.next=newNode;
- //新结点指向原来的第一节点first
- newNode.next=first;
- //元素个数加1
- N++;
- }
-
- //把元素弹出栈
- public T pop(){
- //找到首结点的下一个结点
- Node first=head.next;
- if(first==null){
- return null;
- }
- head.next=first.next;
- //元素个数-1
- N--;
- return first.data;
- }
-
- @Override
- public Iterator<T> iterator() {
- return new SIterator();
- }
-
- private class SIterator implements Iterator{
-
- private Node n;
- public SIterator(){
- this.n=head;
- }
- @Override
- public boolean hasNext() {
- return n.next!=null;
- }
-
- @Override
- public Object next() {
- n=n.next;
- return n.data;
- }
- }
- }
测试代码
- package cn.itcast.algorithm.stackTest;
-
- import cn.itcast.algorithm.stack.Stack;
-
- public class StackTest {
- public static void main(String[] args) {
- //创建栈对象
- Stack<String> stack=new Stack<>();
- //测试压栈
- stack.push("a");
- stack.push("b");
- stack.push("c");
- stack.push("d");
-
- for(String s:stack){
- System.out.println(s);
- }
- System.out.println("----------------");
- //测试出栈
- String s1=stack.pop();
- System.out.println("弹出元素:"+s1);
- System.out.println("剩余元素个数:"+stack.size());
- }
- }
测试结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。