如何解决c++ Stack Array实现及显示错误
因此,在我的作业中,我们应该创建一个 Stack 类,该类使用数组实现为 double 类型的值创建堆栈。
这是头文件:
#ifndef STACK_H
#define STACK_H
class Stack
{
private:
double *stackArray; //Pointer to the Stack array.
int stackSize; //The size of stack.
int top; //The first "plate" on top of the stack/Holds the index of the first element in the stack
void copy(const Stack ©); //The fxn the copy constructor calls.
void destroy(); //The fxn the destructor calls.
void resize(); //Makes the array larger if capacity has been reached.
public:
Stack(); //Default Constructor
/***
Stack(const Stack&); //Copy Constructor
***/
~Stack(); //Destructor
//STACK OPERATIONS:
void push(double); //Adds a 'plate' on top of the stack.
void pop(); //Removes 'plate' on top of stack.
bool isEmpty(); //Returns true if stack is empty,false otherwise.
bool isFull(); //Returns true if stack is full,false otherwise.
double peek(); //Gets the top item of the stack without removing the item.
int getSize(); //Makes the array larger if the capacity of the array is being reached.
void display() const; //Displays the values in the stack.
};
#endif
这是实现文件:
#include "Stack.h"
#include <iostream>
using namespace std;
Stack::Stack() //The Constructor
{
stackSize = 1;
stackArray = new double[stackSize]; //Dynamically allocate memory for an array of a stack variable.
top = -1; //Set the top of the stack to -1. So its empty.
}
/***
Stack::Stack(const Stack &obj) //The Copy constructor
{
copy(const Stack ©);
}
***/
Stack::~Stack() //The destructor
{
destroy(); //Calls the destroy function to delete the array.
}
void Stack::push(double value) //Adds a new 'plate' on the stack
{
if (isFull())
{
resize(); //Makes a new stack that is double the size of the current one
//While copying all values of the previous stack.
push(value);
}
top++; //Increment top....
stackArray[top] = value; //...So we can make 'value' the new top in the array.
}
void Stack::pop() //Removes a 'plate' from the stack
{
if (isEmpty())
{
cout << "The stack is empty.\n";
}
else //Otherwise...
{
top--; //Removes the current value of top from the stack.
}
}
bool Stack::isEmpty()
{
bool status; //Tells the current status of the stack
if (top == -1) //If theres nothing in the stack...
{
status = true; //...status returns true.
}
else //Otherwise...
{
status = false; //...The stack MUST have something already in it.
}
return status;
}
bool Stack::isFull()
{
bool status;
if (top == stackSize - 1) //Checks if the top of the stack is equal to the max stack size entered.
status = true; //Returns true if stack is full.
else
status = false; //Or false if not.
return status;
}
void Stack::destroy()
{
delete [] stackArray; //Delete the Stack Array.
}
double Stack::peek() //Gets the top item of the stack without removing item
{
return stackArray[top];
}
int Stack::getSize() //Determines the size of the stack
{
return top + 1;
}
void Stack::resize()
{
stackSize *= 2; //Make the stackSize of the new array
//AT LEAST TWICE as big as the previous one.
double *stackArray2nd = new double[stackSize]; //Make new array
for (int index = 0; index <= top; index++)
{
stackArray2nd[index] = stackArray[index]; //Make the new stack array equal to the old stack array.
}
destroy();
stackArray = stackArray2nd; //Stack array no longer has a size associated with it
}
void Stack::copy(const Stack ©)
{
stackSize = copy.stackSize; //Copy the stackSize attribute.
for (int index = 0; index < stackSize; index++) //Copy the Stack's contents
stackArray[index] = copy.stackArray[index];
top = copy.top; //Set the top of the stack.
}
void Stack::display() const //Prints out the stack
{
for (int index = 0; index <= top; index++)
{
cout << stackArray[index] << " ";
}
cout << endl;
}
这是驱动程序:
#include <iostream>
#include "Stack.h"
using namespace std;
int main()
{
Stack stack1;
cout << "Lets get the stack size!\n"; //Check to see if the getSize function works
cout << stack1.getSize();
cout << "\nLets see if we can add a value on to the stack!\n";
stack1.push(33.2);
stack1.display();
cout << "\nLets add another.\n";
stack1.push(27.4);
stack1.display();
return 0;
}
我的问题是,当我尝试运行它时,它会编译,但由于某种原因,我得到了这个:
Lets get the stack size!
0
Lets see if we can add a value to the stack!
33.2
Lets add another.
33.2 27.4 27.4
为什么要添加另一个 27.4?还有一个问题,我似乎无法将推入数组的值作为最左侧的第一个值打印出来。
请帮忙!我不确定为什么会发生这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。