链式堆栈

链式堆栈的存储结构

如同单链表结构,每个结点会有俩个区域,一个数据元素区(element),用来存放数据元素;另一个是指针区(next),用来构造数据元素之间的关系。

堆栈有两端:栈顶top,参与各种对堆栈的操作;另一端是栈底。

我们把链表的head端作为栈顶,另一端作为栈底。这样插入和删除栈顶元素时,无须遍历整个链表所以时间复杂度为O(1)。

由于堆栈的入栈和出栈都是固定在栈顶进行的,不存在单链表插入或删除操作允许在任意位置进行,所以,链式堆栈通常不带头结点。

44298c1d-2054-4dd5-be7d-1f7e4cd5f43f

Stack接口类设计

Stack.java

package 堆栈;
public interface Stack {
//入栈
public void push(Object obj)throws Exception;
//出栈
public Object pop() throws Exception;
//获取栈顶元素
public Object getTop()throws Exception;
//判断栈不为空
public boolean notEmpty();
}

Node结点类设计

Node.java

package 堆栈;
public class Node {
Object element;//数据域
Node next;//指针域

//头结点的构造方法
public Node(Node nextval){
this.next=nextval;
}
//非头结点的构造方法
public Node(Object obj,Node nextval){
this.element=obj;
this.next=nextval;
}
//获得当前结点的后继结点
public Node getNode(){
return this.next;
}
//获得当前的数据域的值
public Object getDate(){
return this.element;
}
//设置当前结点的指针域
public void setNext(Node nextval){
this.next=nextval;
}
//设置当前结点的数据域
public void setDate(Object obj){
this.element=obj;
}
//转换数据元素为String类型
public String toString(){
return this.toString();
}

测试类设计

LinListTest.java

package 堆栈;
public class LinStackTest {
public static void main(String[] args) {
LinStack mystack=new LinStack();

int test[]={1,2,3,4,5,6};
int n=6;


try{
for(int i=0;i<n;i++)
{
mystack.push(new Integer(test[i]));
}

System.out.println("当前栈顶元素为:"+mystack.getTop());

System.out.println("出栈元素序列为:");
while(mystack.notEmpty()){
System.out.print(mystack.pop()+"\t");
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值