首页 > 代码库 > Stack结构模拟
Stack结构模拟
我们接着就开始模拟stack数据结构,发觉敲多的头昏,坚持分享
1.基础结构对象Node
public class Node {
private Object data;// 存放值
private Node next;// 下一个节点
public Node(){}
public Node(Object data) {// 构造值为data的结点
this(data,null);
}
public Node(Object data, Node next) {
this.data = http://www.mamicode.com/data;
this.next = next;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = http://www.mamicode.com/data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
2.栈接口
public interface IStack {
public void clear(); // 将一个已经存在的栈置成空
public boolean isEmpty(); // 测试栈是否为空
public int length();// 求栈中的数据元素个数并由函数返回其值
public Object peek();// 查看栈顶对象而不移除它,返回栈顶对象
public Object pop();// 移除栈顶对象并作为此函数的值返回该对象
public void push(Object o) throws Exception;// 把项压入栈顶
public void display();// 打印函数,打印所有栈中的元素(栈底到栈顶)
}
3.单链表实现栈
public class LinkStack implements IStack{
private Node top;// 栈顶元素的引用
//清空栈
public void clear() {
top=null;
}
//栈数据展示
public void display() {
Node p=top;
int index=1;
while(p!=null)
{
System.out.println("(节点"+index+")"+p.getData());
p=p.getNext();
index++;
}
}
//栈是否为空
public boolean isEmpty() {
return top==null;
}
//栈长度
public int length() {
Node p=top;
int length=0;
while(p!=null)
{ p=p.getNext();
length++;
}
return length;
}
//取出首元素,但不删除
public Object peek() {
if (!isEmpty())
return top.getData();// 返回栈顶元素
else
return null;
}
//取出首元素,并删除
public Object pop() {
if (!isEmpty()) {
Node p = top;// p指向栈顶结点
top = top.getNext();
return p.getData();
} else
return null;
}
//插入数据
public void push(Object o) throws Exception {
//改变栈顶结点
Node p = new Node(o); // 构造一个新的结点
p.setNext(top);
top = p;
}
public Node getTop() {
return top;
}
public void setTop(Node top) {
this.top = top;
}
}
4.顺序结构实现栈
public class SqStack implements IStack{
private Object[] stackElem; // 栈存储空间
private int top; // 非空栈中始终表示栈顶元素的下一个位置,当栈为空时其值为0
public SqStack(int maxSize)
{
stackElem=new Object[maxSize];
top=0;
}
//清空栈
public void clear() {
top=0;
}
//展示队列
public void display() {
//从站栈顶开始打印
for (int i=top-1;i>=0;i--)
{
System.out.println(stackElem.toString() + " ");// 打印
}
}
//栈是否为空
public boolean isEmpty() {
return top==0;
}
//栈的长度
public int length() {
return top;
}
public Object peek() {
if(!isEmpty())// 栈非空
return stackElem[top-1]; // 栈顶元素
else
// 栈为空
return null;
}
public Object pop() {
if (top == 0)// 栈为空
return null;
else {// 栈非空
return stackElem[--top];// 修改栈顶指针,并返回栈顶元素
}
}
public void push(Object o) throws Exception {
if (top == stackElem.length)// 栈满
throw new Exception("栈已满");// 输出异常
else
// 栈未满
stackElem[top++] = o;// o赋给栈顶元素后,top增1
}
}
小结:希望这样的分享方式对你有用.
1.基础结构对象Node
public class Node {
private Object data;// 存放值
private Node next;// 下一个节点
public Node(){}
public Node(Object data) {// 构造值为data的结点
this(data,null);
}
public Node(Object data, Node next) {
this.data = http://www.mamicode.com/data;
this.next = next;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = http://www.mamicode.com/data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
2.栈接口
public interface IStack {
public void clear(); // 将一个已经存在的栈置成空
public boolean isEmpty(); // 测试栈是否为空
public int length();// 求栈中的数据元素个数并由函数返回其值
public Object peek();// 查看栈顶对象而不移除它,返回栈顶对象
public Object pop();// 移除栈顶对象并作为此函数的值返回该对象
public void push(Object o) throws Exception;// 把项压入栈顶
public void display();// 打印函数,打印所有栈中的元素(栈底到栈顶)
}
3.单链表实现栈
public class LinkStack implements IStack{
private Node top;// 栈顶元素的引用
//清空栈
public void clear() {
top=null;
}
//栈数据展示
public void display() {
Node p=top;
int index=1;
while(p!=null)
{
System.out.println("(节点"+index+")"+p.getData());
p=p.getNext();
index++;
}
}
//栈是否为空
public boolean isEmpty() {
return top==null;
}
//栈长度
public int length() {
Node p=top;
int length=0;
while(p!=null)
{ p=p.getNext();
length++;
}
return length;
}
//取出首元素,但不删除
public Object peek() {
if (!isEmpty())
return top.getData();// 返回栈顶元素
else
return null;
}
//取出首元素,并删除
public Object pop() {
if (!isEmpty()) {
Node p = top;// p指向栈顶结点
top = top.getNext();
return p.getData();
} else
return null;
}
//插入数据
public void push(Object o) throws Exception {
//改变栈顶结点
Node p = new Node(o); // 构造一个新的结点
p.setNext(top);
top = p;
}
public Node getTop() {
return top;
}
public void setTop(Node top) {
this.top = top;
}
}
4.顺序结构实现栈
public class SqStack implements IStack{
private Object[] stackElem; // 栈存储空间
private int top; // 非空栈中始终表示栈顶元素的下一个位置,当栈为空时其值为0
public SqStack(int maxSize)
{
stackElem=new Object[maxSize];
top=0;
}
//清空栈
public void clear() {
top=0;
}
//展示队列
public void display() {
//从站栈顶开始打印
for (int i=top-1;i>=0;i--)
{
System.out.println(stackElem.toString() + " ");// 打印
}
}
//栈是否为空
public boolean isEmpty() {
return top==0;
}
//栈的长度
public int length() {
return top;
}
public Object peek() {
if(!isEmpty())// 栈非空
return stackElem[top-1]; // 栈顶元素
else
// 栈为空
return null;
}
public Object pop() {
if (top == 0)// 栈为空
return null;
else {// 栈非空
return stackElem[--top];// 修改栈顶指针,并返回栈顶元素
}
}
public void push(Object o) throws Exception {
if (top == stackElem.length)// 栈满
throw new Exception("栈已满");// 输出异常
else
// 栈未满
stackElem[top++] = o;// o赋给栈顶元素后,top增1
}
}
小结:希望这样的分享方式对你有用.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。