数据结构复习之【栈】
来源:互联网 发布:手机淘宝怎么注册账号 编辑:程序博客网 时间:2024/04/29 13:16
栈:先进后出的线性表;
栈也可以通过顺序存储和链式存储的方式实现;
一、顺序存储实现
数组的尾端作为栈顶;
代码实现:
package org.xiazdong.list;public class MyArrayStack<T> {private static final int DEFAULT_LENGTH = 10;private T[]t;private int length;private int top;public MyArrayStack(){t = (T[])new Object[DEFAULT_LENGTH];length = 0;top = -1;}public void push(T e){if((top+1)>=t.length){larger(t.length*2);}top++;if(top>=t.length){}t[top]=e;}public T top(){return t[top];}public T pop(){if(top<0){throw new ArrayIndexOutOfBoundsException();}T tmp = t[top];top--;return tmp;}public int getSize(){return top+1;}private void larger(int len){T[]tmp = (T[])new Object[len];for(int i=0;i<t.length;i++){tmp[i] = t[i];}t = tmp;}}
二、链式存储实现
链表的头端作为栈顶;
代码实现如下:
package org.xiazdong.list;import org.xiazdong.list.MyLinkedList.Node;public class MyLinkedStack <T>{private Node top;private int count;public MyLinkedStack(){count = 0;top = null;}public T pop(){if(top==null){throw new ArrayIndexOutOfBoundsException();}T elem = top.elem;top = top.next;return elem;}public T top(){return top.elem;}public void push(T e){Node n = new Node();n.elem = e;n.next = top;top = n;}class Node{private T elem;Node next;public Node(){elem = null;next = null;}public Node(T elem,Node next){this.elem = elem;this.next = next;}}}
三、比较
顺序存储链式存储优点访问快、增加删除都为O(1)增加删除都为O(1),对于空间没有限制缺点浪费空间,容易溢出指针需要空间
四、栈的应用
1.递归
我们这里以斐波那契数为例;fib(n) = fib(n-1)+fib(n-2),fib(2) = fib(1) = 1;
递归和栈是密不可分的,递归的实现就是通过栈来完成的;
2.后缀表达式
我们在做计算器应用时肯定会用到后缀表达式,中缀表达式转换到后缀表达式,后缀表达式求出值都是通过栈实现的;
后缀表达式的讲解在:http://blog.csdn.net/xiazdong/article/details/7272693
- 数据结构复习之【栈】
- 复习数据结构之栈
- 数据结构之【栈】--复习
- 复习-数据结构之栈和队列
- 数据结构复习之堆
- 数据结构复习之【树】
- 数据结构复习之【排序】
- 数据结构复习之【队列】
- 数据结构复习之【图】
- 复习数据结构之队列
- 数据结构复习之【排序】
- 数据结构复习之【图】
- 数据结构复习之【排序】
- 数据结构之【队列】--复习
- 数据结构之【树】--复习
- 数据结构复习之串
- 数据结构之【排序】--复习
- 《数据结构》复习之图
- Windows下Apache Tomcat的安装
- 如何创建一个九宫格拉伸方式的Sprite
- 第一周实验报告
- 关于ClassPath
- 第二周试验报告2
- 数据结构复习之【栈】
- LINUX串口简明解析[修正版]
- 【转】哈佛学生是如何度过大学4年的
- [攻克存储] 掌握SDRAM/DDR的结构与寻址
- 请高手指教,如何拦截浏览器的请求URL,并把URL中的参数保存起来
- [HDOJ 1008] Elevator (模拟题)
- 内存对齐
- Java类继承:父与子的恩恩怨怨
- ubuntu下用Eclipse搭建C++开发环境