我就廢話不多說了,大家還是直接看代碼吧~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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實現棧的入棧和出棧等基本操作
棧的英文為(stack)
棧是一個先入后出(FILO-First In Last Out)的有序列表。
棧(stack)是限制線性表中元素的插入和刪除只能在線性表的同一端進行的一種特殊線性表。允許插入和刪除的一端,為變化的一端,稱為棧頂(Top),另一端為固定的一端,稱為棧底(Bottom)。
根據棧的定義可知,最先放入棧中元素在棧底,最后放入的元素在棧頂,而刪除元素剛好相反,最后放入的元素最先刪除,最先放入的元素最后刪除
棧的基本操作實現
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
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:表示添加數據到棧(入棧)" ); System.out.println( "pop:表示從棧取出數據(出棧)" ); System.out.println( "請輸入你的選擇" ); key = scanner.next(); switch (key) { case "show" : stack.list(); break ; case "push" : System.out.println( "請輸入一個數" ); 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( "棧空,沒有數據" ); return ; } for ( int i = top;i>= 0 ;i--) { System.out.printf( "stack[%d]=%d\n" ,i,stack[i]); } } } |
測試結果
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。如有錯誤或未考慮完全的地方,望不吝賜教。
原文鏈接:https://blog.csdn.net/qq_34741911/article/details/88865080