java - 如何修改抽象数据类型(ADT)堆栈?

标签 java stack abstract-data-type

使用堆栈接口(interface)定义,什么字符串位于堆栈顶部,什么字符串位于堆栈底部?

我知道 .push 方法只是将所选项目添加到堆栈顶部,但我遇到的问题是当 Push 方法中有 pop 方法或 Push 中有 peek 方法时方法。

我还需要 String name = stringStack.pop(); 行的帮助

StackInterface<String> stringStack = new MyStack<>(); 

stringStack.push( “Jane” ); 
stringStack.push( “Jess” ); 
stringStack.push( “Jill” ); 
stringStack.push( stringStack.pop()); 
stringStack.push( stringStack.peek()); 
stringStack.push( “Jim” ); 
String name = stringStack.pop(); 
stringStack.push( stringStack.peek());

我希望顺序是:

顶部吉姆吉姆吉尔吉尔杰西简底部

最佳答案

在这样的情况下:

stringStack.push( stringStack.pop()); 

您只需记住,在推送值之前,push 必须知道要推送什么值。它如何知道要推送什么值?当然是评估 pop()!因此,首先弹出一个项目,然后 push 知道要推送哪个项目,然后推回到后面。换句话说,push 内的 pop 总体上对堆栈没有任何作用。

关于:

stringStack.push( stringStack.peek());

这只会查看顶部项目,然后将其插入堆栈,而不是弹出顶部项目然后将其插入堆栈。所以总的来说,这只是“复制”顶部项目。

这是每行之后堆栈的样子(左边是顶部):

stringStack.push( “Jane” ); 
// Jane
stringStack.push( “Jess” ); 
// Jess Jane
stringStack.push( “Jill” ); 
// Jill Jess Jane
stringStack.push( stringStack.pop()); 
// Jill Jess Jane
stringStack.push( stringStack.peek()); 
// Jill Jill Jess Jane
stringStack.push( “Jim” ); 
// Jim Jill Jill Jess Jane
String name = stringStack.pop(); 
// Jill Jill Jess Jane
stringStack.push( stringStack.peek());
// Jill Jill Jill Jess Jane

关于java - 如何修改抽象数据类型(ADT)堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58280711/

相关文章:

javascript - 如何从 Java POJO 模型类生成 javascript

java - ConcurrentSkipListSet 访问第一个和最后一个元素的复杂性

java - 静态引用非静态字段Java错误

c - 在使用堆栈方面,为什么我们需要一个基指针和一个堆栈指针

c - 排序链表(ADT优先级队列)

c - ADT、void 指针和 int - C 中几乎没有相关警告的问题

java - 查找SQL语句列表中的元素

java - Java 和 Android 的代码解释器和运行器

使用堆栈的 C++ 后缀计算器

haskell - 我可以抽象地导入非抽象类型吗?