一、概述
栈(stack):是线性表的一种,限制仅在线性表的一端进行插入和删除操作。其中允许插入和删除的一端称为栈顶(top),不允许插入和删除的一端称为栈底(bottom)。
二、 顺序存储栈的基本操作以及算法实现
基本操作:初始化、判断是否为空、求栈深、读取栈顶元素、出栈/入栈、栈置空等。
抽象出栈的基本操作:
public interface IStack{
public void push(Object obj);
public Object pop();
public int size();
public void clear();
public boolean isEmpty();
public Object top();
}
栈的顺序存储数据结构Java实现:
public class Stack implements IStack{
final int maxsize = 100;
int elem[] = new int[maxsize];
int top;
public Stack(){
top = 0;
}
}
1.栈置空
public void clear(){
top = 0;
}
2.判断栈是否为空
public boolean isEmpty(){
if(top > 0)
return false;
else
return true;
}
3.进栈操作
public void push(int data){
if(top==maxsize)
System.out.print("stack overflow");
else
elem[top++] = data;//进栈
}
4.出栈操作
pubic int pop(){
if(top==0)
return 0;
else
top--;//栈顶指针减1
return elem[top];//返回原栈顶元素
}
5.求栈深操作
public int size(){
return top;
}
6.读取栈顶元素
public int top(){
if(top==0)
return 0;
else
return elem[top-1];
}
三、链式存储栈的基本操作以及算法实现
说明:顺序存储的栈使用简单,但必须事先分配一定大小的存储空间,分配大了可能会造成浪费,分配小了空间不够可能出现栈溢出异常,此时可考虑链表存储栈中的元素,这样既不会造成浪费又不会造成栈溢出。
链式栈的结构如下:
//链栈中的数据结点结构
public class StackNode{
int data;
StackNode next;
}
//栈的基本操作不变
public class LinkStack implements IStack{
StackNode top;
public LinkStack(){
top.data = 0;
}
}
1.链栈的进栈操作
public void push(int data){
StackNode node = new StackNode();
node.data = data;
node.next = top;//链入新的结点
top = node;//修改栈顶指针
}
2.链栈的出栈操作
public int pop(){
int data;
if(top==null)
return 0;
else{
data = top.data;
top = top.next;
return data;
}
}
点击查看更多内容
5人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦