栈的存储结构
来源:互联网 发布:淘宝怎么看卖家的评价 编辑:程序博客网 时间:2024/05/29 16:20
(1)栈的定义:限制在表的一端进行删除和插入的线性表,通常能够插入和删除的一端为栈顶(top);
(2)顺序栈:顺序栈的实现,从本质上来讲就是顺序线性表的实现,唯一重要的是应该用数组的那一端表示栈顶。主要操作是出栈和入栈,也就是修改栈顶指针;
java代码实现:class SqStack{ private int[] stack; private int top; public SqStack(){ this(10); //在构造方法内部使用this关键词调用其他方法时,调用方法只能出现在内部的第一行可执行代码。 } public SqStack(int size){ this.stack=new int[size]; this.top=0; } public void push(int val){ //入栈 if(full()) resize(); this.stack[++top]=val; } public void pop(){ //出栈 if(empty()) return; top--; } public int top(){ //取栈顶元素; return this.stack[top--]; } public boolean empty(){ return this.top==0; } public boolean full(){ return this.top==this.stack.length; } public void resize(){ stack=Arrays.copyOf(stack, stack.length*2); //扩容 }
(2)链式栈:堆栈的链式存储结构,对链表的头部操作来实现出栈和入栈,链式栈的好处是不存在溢出;
java代码实现:class Node{ //定义一个结点 int value; Node next; public Node(){ this(0); } public Node(int value){ //对结点初始化 this.value=value; }}class LinkStack{ Node bottom; Node top; public LinkStack(){ this.top=new Node(0); } public void push(int val){ Node n=new Node(val); //先申请结点 n.next=top; //新结点的next指向旧结点; top=n; } public void pop(){ if(empty()) return; top=top.next; } public int top(){ return top.value; } public boolean empty(){ return top==bottom; } //给类对象提供toString的方法 public String toString(){ StringBuilder builder=new StringBuilder(); Node n=top; while(n!=bottom){ builder.append(n.value+ " "); n=n.next; } return builder.toString(); }}main函数实现测试:public class TestLinkStack { public static void main(String[] args) { // TODO Auto-generated method stub LinkStack s=new LinkStack (); Random r=new Random(); for(int i=0;i<20;i++){ int n=r.nextInt(100); s.push(n); } System.out.println(s.toString()); }}
阅读全文
0 0
- 栈的存储结构
- 栈的存储结构
- 栈的存储结构
- 栈的存储结构
- 栈的顺序存储结构
- 栈的链式存储结构
- 栈的顺序存储结构
- 栈的链式存储结构
- 栈的顺序存储结构
- 栈的链式存储结构
- 栈的顺序存储结构
- 栈的链式存储结构
- 栈的顺序存储结构
- 栈的顺序存储结构
- 栈的链式存储结构
- 栈的顺序存储结构
- 栈的顺序存储结构
- 栈的链式存储结构
- JAVA配置相关注意事项和javac不是内部或外部命令的处理办法
- 六级_第十四天
- Python的计时timeit模块概述
- 1·RHCSA重设root密码
- CodeForces
- 栈的存储结构
- Java8 I/O源码-BufferedReader与BufferedWriter
- chapter20 Netty架构剖析
- SDK在Android Studio中的配置陷阱
- JAVA-JDK配置-JDK下载安装以及环境变量配置(win10)
- KNN(K最临近算法)的python实现
- java日志组件介绍(common-logging,log4j,slf4j,logback )
- 分布式数据库
- (学习java)BF算法