数据结构之栈的操作(Java实现)

本文介绍了如何使用Java实现数据结构中的栈操作,包括代码实现和测试,详细讲解了栈的基本概念及其在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.知识储备
在这里插入图片描述
在这里插入图片描述
2.代码实现:

package Stack;

import java.util.Iterator;

public class Stack<T> implements Iterable<T>{
  //记录首节点
	private Node head;
	//记录元素个数
	private int N;
	
	private class Node{
		public T item;
		public Node next;
		
		public Node(T item,Node next) {
			// TODO Auto-generated constructor stub
			this.item=item;
			this.next=next;
		}
	}
	public Stack() {
		// TODO Auto-generated constructor stub
		this.head=new Node(null, null);  //初始化头节点
		this.N=0;
	}
	
	//判断当前元素个数是否为零
	public  boolean isEmpty(){
		return N==0;
	}
	
	//获取栈中元素的个数
	public int size(){
		return N;
	}
	
	//压栈操作
	public void push(T t){
		//找到首节点指向的第一个节点
		Node oldFirst =head.next;
		//创建新节点
		Node newFirst=new Node(t,null);
		//让首节点指向新节点
		head.next=newFirst;
		//让新节点指向原来的第一个节点
		newFirst.next=oldFirst;
		//让元素个数加1
		N++;
	}
	
	//弹栈操作
	public T pop(){
		//找到首节点指向的第一个节点
		Node oldFirst=head.next;
		//安全性校验,防止链表为空
		if(oldFirst==null){
			return null;
		}
		//让首节点指向原来第一个节点的下一个节点
		head.next=oldFirst.next;
		//元素个数-1
		N--;
		return oldFirst.item;
	}
	
	//遍历方法打包
	public static void foreach(Stack<String> list){
		for(String item : list){
			System.out.print(item+"->");
		}
		System.out.println();
	}

	@Override
	public Iterator<T> iterator() {
		// TODO Auto-generated method stub
		return new SIterator();
	}
	private class SIterator implements Iterator{
        private Node n;            //用来记录每次拿到的当前节点
        public SIterator() {
			// TODO Auto-generated constructor stub
        	this.n=head;            //遍历方法初始化,时n指向头节点
		}
		@Override
		public boolean hasNext() {
			// TODO Auto-generated method stub
			return n.next!=null;
		}

		@Override
		public Object next() {
			// TODO Auto-generated method stub
			n=n.next;
			return n.item;
		}
		
	}
}

3.测试类:

package Stack;

public class StackTest {
   public static void main(String[] args) {
	 //创建栈对象
	   Stack<String> stack1=new Stack<String>();
	   //压栈操作
	   stack1.push("美国队长");
	   stack1.push("钢铁侠");
	   stack1.push("雷神");
	   stack1.push("绿巨人");
	   stack1.push("黑寡妇");
	   stack1.push("蜘蛛侠");
	   stack1.push("冬日战士");
	   stack1.push("黑豹");
	   stack1.push("鹰眼");
	   //遍历
	   Stack.foreach(stack1);
	   //显示元素个数
	   System.out.println("元素个数:"+stack1.size());
	   //弹栈操作
	   System.out.println(stack1.pop());
	   //遍历
	   Stack.foreach(stack1);
	   //显示元素个数
	   System.out.println("元素个数:"+stack1.size());
   }
}

4.测试结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值