java 實(shí)現(xiàn)下壓棧的操作(能動(dòng)態(tài)調(diào)整數(shù)組大小)
我就廢話不多說(shuō)了,大家還是直接看代碼吧~
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() {}
}
}
補(bǔ)充:Java實(shí)現(xiàn)棧的入棧和出棧等基本操作
棧的英文為(stack)
棧是一個(gè)先入后出(FILO-First In Last Out)的有序列表。
棧(stack)是限制線性表中元素的插入和刪除只能在線性表的同一端進(jìn)行的一種特殊線性表。允許插入和刪除的一端,為變化的一端,稱為棧頂(Top),另一端為固定的一端,稱為棧底(Bottom)。
根據(jù)棧的定義可知,最先放入棧中元素在棧底,最后放入的元素在棧頂,而刪除元素剛好相反,最后放入的元素最先刪除,最先放入的元素最后刪除
棧的基本操作實(shí)現(xiàn)
package com.atguigu.stack;
import java.util.Scanner;
public class ArrayStackDemo {
public static void main(String[] args) {
//測(cè)試
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("請(qǐng)輸入你的選擇");
key = scanner.next();
switch(key) {
case "show":
stack.list();
break;
case "push":
System.out.println("請(qǐng)輸入一個(gè)數(shù)");
int value = scanner.nextInt();
stack.push(value);
break;
case "pop":
try {
int res = stack.pop();
System.out.printf("出棧的語(yǔ)句是%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("???,沒(méi)有數(shù)據(jù)");
return;
}
for(int i = top;i>=0;i--) {
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
}
測(cè)試結(jié)果

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

