使用C ++交换堆栈中的第一个和最后一个元素
swapping the first and last element in a stack using c++
我想制作一个函数来获取堆栈(作为数组)
并将它 return 堆栈交换堆栈中的第一个元素和最后一个元素
所以我将为数据使用临时堆栈
我会用
但是我怎么知道我什么时候到达堆栈的末尾?
我已经把栈的实现写成了一个数组
但我需要有关函数 swap
的帮助
void Swap(Stack x)
{
Stack tmp(100);
int top1 = x.pop;
for (int i = 0;; i++)
{
x.pop = tmp.push;
}
}
我知道这是错误的,但我不确定
任何帮助,将不胜感激
,谢谢
编辑
我一开始是这样写函数的,发现不能带参数
void stack::Swap()
{
Stack tmp(100);
int top1 = this->pop;
for (int i = 0;; i++)
{
this->pop = tmp.push
}
};
这里编辑的是答案中的代码
Stack Swap(Stack x){
int mytop,mybottom;
mytop=x.pop();
int tmp[x.length-2],i=0;
while(!x.isEmpty()){
mybottom=x.pop();
tmp[i++]=mybottom;
}
Stack returnIt;
returnIt.push(mytop);
for(i=0;i<=x.length -3;i++){
returnIt.push(tmp[i]);
}
returnIt.push(mybottom);
return returnIt;
}
IDEA : 将堆栈的顶部和底部存储在变量中,将顶部和底部之间的元素存储在数组中。现在你只需将原始堆栈的底部推入新堆栈,然后按原始顺序将元素推入新堆栈,最后将原始堆栈的顶部推入。
code.
#include <bits/stdc++.h>
using namespace std;
void rev(stack<int>&x){
int sz=x.size(),mytop,mybottom;
mytop=x.top();
x.pop();
int tmp[sz-1],i=0;
while(!x.empty()){
mybottom=x.top();
tmp[i++]=mybottom;
x.pop();
}
stack<int> returnIt;
returnIt.push(mybottom);
for(i=0;i<=sz-3;i++){
returnIt.push(tmp[i]);
}
returnIt.push(mytop);
while(!returnIt.empty()){
int tt=returnIt.top();
x.push(tt);
returnIt.pop();
}
}
int main() {
// your code goes here
stack<int>x;
x.push(1);
x.push(2);
x.push(3);
x.push(4);
x.push(5);
stack<int>y=x;
cout<<"Before reversing : ";
while(!y.empty()){
int tt=y.top();
cout<<tt;
y.pop();
}
rev(x);
cout<<"\nAfter reversing : ";
while(!x.empty()){
cout<<x.top();
x.pop();
}
return 0;
}
我不知道我是否真的正确理解了你的问题,但看起来你希望堆栈的第一个元素是最后一个,最后一个是第一个。如果是这样,你还没有真正理解堆栈的工作方式以及何时使用它,因为堆栈就像现实生活中的堆栈一样。例如,您将一堆品客薯片(是的薯片)放在一个经典的圆柱体中。现在堆栈允许您只访问堆栈顶部的元素(添加的最后一个对象),那是因为如果您尝试取出中心之一,堆栈将会崩溃。但是如果你想在中心获取一个元素,你必须从顶部获取很多元素直到你到达那个元素,但是如果你这样做,你就使用了错误的堆栈!堆栈用于按添加顺序收集对象(如列表),但只能访问顶部。例如,您可以将其用于编辑器中的撤消功能,在那里您可以将您执行的所有操作添加到堆栈中。现在如果你使用撤消功能,下一个动作之后的一个可以被撤消,但是如果你现在做一个不同的动作,堆栈顶部有一个新元素,你已经采取的这些不能再放在上面,所以他们只是坏了(你想吃就吃)(就像一个时间悖论:"You cant undo something you havent done and you cant redo something you will never have done")。
我希望我能帮助您理解堆栈的基本工作,但如果您有任何其他问题或者我没有理解您的问题,请纠正我。
但是如果你真的想做,你正在尝试什么,你必须考虑,你如何在现实生活中做这样的事情:你必须从堆栈中取出每个元素,一个接一个,然后在中间以相同的顺序构建一个新堆栈,但是您放入堆栈的第一个索引是旧堆栈中的第一个。
我从来没有真正用 C++ 编程过,但在伪代码中它可能看起来像这样:
Stack stack;
List<StackElement> list;
//Converting stack to list for better access
for(int i = 0; i<stack.size;i++)
{
list.add(stack.top);
stack.pop;
}
//Add the last element from the list (the last from the stack) on top of the stack (thats now the only object in the stack)
stack.push(list.get(list.size()-1));
list.remove(list.size()-1); //Remove this element
//Save our last element
StackElement lastElement = list.get(0);
list.remove(0);
//Inserting the mid
for(int i = 0; i<list.size;i++)
{
stack.push(list.get(i));
}
//Now put the last element from the old stack on top of the new
stack.push(lastElement):
对不起我的英语不好,我希望你能理解我想说的基本内容。而且代码只是理论,可能是错误的!
我想制作一个函数来获取堆栈(作为数组) 并将它 return 堆栈交换堆栈中的第一个元素和最后一个元素 所以我将为数据使用临时堆栈 我会用 但是我怎么知道我什么时候到达堆栈的末尾?
我已经把栈的实现写成了一个数组 但我需要有关函数 swap
的帮助void Swap(Stack x)
{
Stack tmp(100);
int top1 = x.pop;
for (int i = 0;; i++)
{
x.pop = tmp.push;
}
}
我知道这是错误的,但我不确定 任何帮助,将不胜感激 ,谢谢 编辑 我一开始是这样写函数的,发现不能带参数
void stack::Swap()
{
Stack tmp(100);
int top1 = this->pop;
for (int i = 0;; i++)
{
this->pop = tmp.push
}
};
这里编辑的是答案中的代码
Stack Swap(Stack x){
int mytop,mybottom;
mytop=x.pop();
int tmp[x.length-2],i=0;
while(!x.isEmpty()){
mybottom=x.pop();
tmp[i++]=mybottom;
}
Stack returnIt;
returnIt.push(mytop);
for(i=0;i<=x.length -3;i++){
returnIt.push(tmp[i]);
}
returnIt.push(mybottom);
return returnIt;
}
IDEA : 将堆栈的顶部和底部存储在变量中,将顶部和底部之间的元素存储在数组中。现在你只需将原始堆栈的底部推入新堆栈,然后按原始顺序将元素推入新堆栈,最后将原始堆栈的顶部推入。
code.
#include <bits/stdc++.h>
using namespace std;
void rev(stack<int>&x){
int sz=x.size(),mytop,mybottom;
mytop=x.top();
x.pop();
int tmp[sz-1],i=0;
while(!x.empty()){
mybottom=x.top();
tmp[i++]=mybottom;
x.pop();
}
stack<int> returnIt;
returnIt.push(mybottom);
for(i=0;i<=sz-3;i++){
returnIt.push(tmp[i]);
}
returnIt.push(mytop);
while(!returnIt.empty()){
int tt=returnIt.top();
x.push(tt);
returnIt.pop();
}
}
int main() {
// your code goes here
stack<int>x;
x.push(1);
x.push(2);
x.push(3);
x.push(4);
x.push(5);
stack<int>y=x;
cout<<"Before reversing : ";
while(!y.empty()){
int tt=y.top();
cout<<tt;
y.pop();
}
rev(x);
cout<<"\nAfter reversing : ";
while(!x.empty()){
cout<<x.top();
x.pop();
}
return 0;
}
我不知道我是否真的正确理解了你的问题,但看起来你希望堆栈的第一个元素是最后一个,最后一个是第一个。如果是这样,你还没有真正理解堆栈的工作方式以及何时使用它,因为堆栈就像现实生活中的堆栈一样。例如,您将一堆品客薯片(是的薯片)放在一个经典的圆柱体中。现在堆栈允许您只访问堆栈顶部的元素(添加的最后一个对象),那是因为如果您尝试取出中心之一,堆栈将会崩溃。但是如果你想在中心获取一个元素,你必须从顶部获取很多元素直到你到达那个元素,但是如果你这样做,你就使用了错误的堆栈!堆栈用于按添加顺序收集对象(如列表),但只能访问顶部。例如,您可以将其用于编辑器中的撤消功能,在那里您可以将您执行的所有操作添加到堆栈中。现在如果你使用撤消功能,下一个动作之后的一个可以被撤消,但是如果你现在做一个不同的动作,堆栈顶部有一个新元素,你已经采取的这些不能再放在上面,所以他们只是坏了(你想吃就吃)(就像一个时间悖论:"You cant undo something you havent done and you cant redo something you will never have done")。
我希望我能帮助您理解堆栈的基本工作,但如果您有任何其他问题或者我没有理解您的问题,请纠正我。
但是如果你真的想做,你正在尝试什么,你必须考虑,你如何在现实生活中做这样的事情:你必须从堆栈中取出每个元素,一个接一个,然后在中间以相同的顺序构建一个新堆栈,但是您放入堆栈的第一个索引是旧堆栈中的第一个。
我从来没有真正用 C++ 编程过,但在伪代码中它可能看起来像这样:
Stack stack;
List<StackElement> list;
//Converting stack to list for better access
for(int i = 0; i<stack.size;i++)
{
list.add(stack.top);
stack.pop;
}
//Add the last element from the list (the last from the stack) on top of the stack (thats now the only object in the stack)
stack.push(list.get(list.size()-1));
list.remove(list.size()-1); //Remove this element
//Save our last element
StackElement lastElement = list.get(0);
list.remove(0);
//Inserting the mid
for(int i = 0; i<list.size;i++)
{
stack.push(list.get(i));
}
//Now put the last element from the old stack on top of the new
stack.push(lastElement):
对不起我的英语不好,我希望你能理解我想说的基本内容。而且代码只是理论,可能是错误的!