java 實現(xiàn)下壓棧的操作(能動態(tài)調(diào)整數(shù)組大小)
我就廢話不多說了,大家還是直接看代碼吧~
import java.util.Iterator;
public class ResizingArrayStack<Item> implements Iterable<Item>
{
private Item[] a=(Item[]) new Object[1];
private int N=0;
public boolean isEmpty() { return N==0;}
public int size() {return N;}
private void resize(int max)
{
Item[] temp=(Item[]) new Object[max];
for(int i=0; i<N; i++)
{
temp[i]=a[i];
}
a=temp;
}
public void push(Item item)
{
if(N==a.length) resize(2*a.length);
a[N++]=item;
}
public Item pop()
{
Item item=a[--N];
a[N]=null;
if(N>0 && N==a.length/4) resize(a.length/2);
return item;
}
public Iterator<Item> iterator()
{return new ReverseArrayIterator();}
private class ReverseArrayItertor implements Iterator<Item>
{
private int i=N;
public boolean hasNext() {return i>0;}
public Item next() {return a[--i];}
public void remove() {}
}
}
補充:Java實現(xiàn)棧的入棧和出棧等基本操作
棧的英文為(stack)
棧是一個先入后出(FILO-First In Last Out)的有序列表。
棧(stack)是限制線性表中元素的插入和刪除只能在線性表的同一端進行的一種特殊線性表。允許插入和刪除的一端,為變化的一端,稱為棧頂(Top),另一端為固定的一端,稱為棧底(Bottom)。
根據(jù)棧的定義可知,最先放入棧中元素在棧底,最后放入的元素在棧頂,而刪除元素剛好相反,最后放入的元素最先刪除,最先放入的元素最后刪除
棧的基本操作實現(xiàn)
package com.atguigu.stack;
import java.util.Scanner;
public class ArrayStackDemo {
public static void main(String[] args) {
//測試
ArrayStack stack =new ArrayStack(4);
String key="";
boolean loop = true;
Scanner scanner = new Scanner(System.in);
while(loop) {
System.out.println("show:表示顯示棧");
System.out.println("exit:退出程序");
System.out.println("push:表示添加數(shù)據(jù)到棧(入棧)");
System.out.println("pop:表示從棧取出數(shù)據(jù)(出棧)");
System.out.println("請輸入你的選擇");
key = scanner.next();
switch(key) {
case "show":
stack.list();
break;
case "push":
System.out.println("請輸入一個數(shù)");
int value = scanner.nextInt();
stack.push(value);
break;
case "pop":
try {
int res = stack.pop();
System.out.printf("出棧的語句是%d\n", res);
}catch(Exception e) {
System.out.println(e.getMessage());
}
break;
case "exit":
scanner.close();
loop = false;
break;
default:
break;
}
}
System.out.println("程序退出");
}
}
class ArrayStack{
private int maxSize;
private int[] stack;
private int top = -1;
public ArrayStack(int maxSize) {
this.maxSize=maxSize;
stack = new int[this.maxSize];
}
//棧滿
public boolean isFull() {
return top == maxSize -1;
}
//棧空
public boolean isEmpty() {
return top == -1;
}
//出棧
public void push(int value) {
if(isFull()) {
System.out.println("棧滿");
}
top++;
stack[top] =value;
}
//出棧
public int pop() {
if(isEmpty()) {
throw new RuntimeException("???);
}
int value = stack[top];
top--;
return value;
}
//遍歷棧
public void list() {
if(isEmpty()) {
System.out.println("棧空,沒有數(shù)據(jù)");
return;
}
for(int i = top;i>=0;i--) {
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
}
測試結(jié)果

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Springboot?整合?RocketMQ?收發(fā)消息的配置過程
這篇文章主要介紹了Springboot?整合?RocketMQ?收發(fā)消息,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12
Java導(dǎo)出Word文檔的實現(xiàn)方法詳解
這篇文章主要給大家介紹了關(guān)于Java導(dǎo)出Word文檔的實現(xiàn)方法,在日常的開發(fā)工作中,我們時常會遇到導(dǎo)出Word文檔報表的需求,比如公司的財務(wù)報表、醫(yī)院的患者統(tǒng)計報表、電商平臺的銷售報表等等,需要的朋友可以參考下2023-08-08
springboot項目攔截器重定向循環(huán)問題的解決
這篇文章主要介紹了springboot項目攔截器重定向循環(huán)問題的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Java引用傳遞實現(xiàn)方式以及與值傳遞的區(qū)別
這篇文章主要給大家介紹了關(guān)于Java引用傳遞實現(xiàn)方式以及與值傳遞的區(qū)別的相關(guān)資料,引用傳遞指在調(diào)用函數(shù)時將實際參數(shù)的地址直接傳遞到函數(shù)中,那么在函數(shù)中對參數(shù)所進行的修改,將影響到實際參數(shù),需要的朋友可以參考下2023-09-09
java list,set,map,數(shù)組間的相互轉(zhuǎn)換詳解
這篇文章主要介紹了java list,set,map,數(shù)組間的相互轉(zhuǎn)換詳解的相關(guān)資料,這里附有實例代碼,具有參考價值,需要的朋友可以參考下2017-01-01
Java實現(xiàn)word文檔轉(zhuǎn)成圖片的示例詳解
本文主要為大家詳細介紹了如何在Java項目中引用aspose-words和poi-tljar包實現(xiàn)word文檔轉(zhuǎn)成圖片,感興趣的小伙伴可以跟隨小編一起學習一下2024-10-10

