java 实现下压栈的操作(能动态调整数组大小)

2025-05-29 0 87

我就废话不多说了,大家还是直接看代码吧~

?

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]);

}

}

}

测试结果

java 实现下压栈的操作(能动态调整数组大小)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持快网idc。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/qq_34741911/article/details/88865080

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java 实现下压栈的操作(能动态调整数组大小) https://www.kuaiidc.com/109526.html

相关文章

发表评论
暂无评论