一道关于栈的习题,大家进来帮帮忙.解决方法
一道关于栈的习题,大家进来帮帮忙.
题目如下:
编写一个类,实现简单的栈.栈中有以下操作:元素入栈,读出栈顶元素值,退栈,判断栈顶空否.如果栈溢出,程序终止.栈的数据成员由10个整形的数组构成.先后做如下操作:
创建栈;
将10入栈;
将12入栈;
将14入栈;
读出并输入栈顶元素;
退栈;
读出并输出栈顶元素.
编了一晚上还是不会应用栈,创建栈老出一大堆错误.请大家帮帮我解这道题,顺便问一下友元类定义时,设置的形参中一定要包括所要访问的所有类么?
------解决方案--------------------
#include <vector>
#include <iostream>
template <class T>
class Stack
{
public:
void push(T);
T pop(void);
T getTop(void);
bool isEmpty(void);
private:
std::vector <T> v_;
};
template <class T>
void Stack <T> ::push(T t)
{
v_.push_back(t);
}
template <class T>
T Stack <T> ::pop(void)
{
int temp = v_.back();
v_.pop_back();
return temp;
}
template <class T>
T Stack <T> ::getTop(void)
{
return v_.back();
}
template <class T>
bool Stack <T> ::isEmpty(void)
{
return v_.size() == 0;
}
int main(void)
{
Stack <int> stack;
stack.push(10);
stack.push(12);
stack.push(14);
std::cout < < stack.getTop() < < std::endl;
std::cout < < stack.pop() < < std::endl;
std::cout < < stack.pop() < < std::endl;
std::cout < < stack.pop() < < std::endl;
return 0;
}
------解决方案--------------------
以前写了一个栈的类:
typedef struct{
int x;
int y;
int half_width;
bool is_moving;
}STACK_ITEM; //堆栈里的元素的类型。提供了每个盘的位置,宽读,是否正处于移动状态的信息
/***********************************************************************************************
定义了堆栈类,提供压入和弹出操作,并提供了另外的便于遍历的操作
************************************************************************************************/
class STACK
{
public:
STACK();
~STACK();
bool Init(int s_max);
void s_push(STACK_ITEM & item);
STACK_ITEM s_pop(void);
STACK_ITEM s_one(int iter);//为了以后好遍历栈,提供一个访问栈中任意元素的接口
int Get_top(void);
void Refresh(int iter,int x, int y); // 这里是为了可以改变栈中的值
private:
int max_items;
int top; //在这里约定,top指向最上面元素的上面的位置
STACK_ITEM * stack;
};
题目如下:
编写一个类,实现简单的栈.栈中有以下操作:元素入栈,读出栈顶元素值,退栈,判断栈顶空否.如果栈溢出,程序终止.栈的数据成员由10个整形的数组构成.先后做如下操作:
创建栈;
将10入栈;
将12入栈;
将14入栈;
读出并输入栈顶元素;
退栈;
读出并输出栈顶元素.
编了一晚上还是不会应用栈,创建栈老出一大堆错误.请大家帮帮我解这道题,顺便问一下友元类定义时,设置的形参中一定要包括所要访问的所有类么?
------解决方案--------------------
#include <vector>
#include <iostream>
template <class T>
class Stack
{
public:
void push(T);
T pop(void);
T getTop(void);
bool isEmpty(void);
private:
std::vector <T> v_;
};
template <class T>
void Stack <T> ::push(T t)
{
v_.push_back(t);
}
template <class T>
T Stack <T> ::pop(void)
{
int temp = v_.back();
v_.pop_back();
return temp;
}
template <class T>
T Stack <T> ::getTop(void)
{
return v_.back();
}
template <class T>
bool Stack <T> ::isEmpty(void)
{
return v_.size() == 0;
}
int main(void)
{
Stack <int> stack;
stack.push(10);
stack.push(12);
stack.push(14);
std::cout < < stack.getTop() < < std::endl;
std::cout < < stack.pop() < < std::endl;
std::cout < < stack.pop() < < std::endl;
std::cout < < stack.pop() < < std::endl;
return 0;
}
------解决方案--------------------
以前写了一个栈的类:
typedef struct{
int x;
int y;
int half_width;
bool is_moving;
}STACK_ITEM; //堆栈里的元素的类型。提供了每个盘的位置,宽读,是否正处于移动状态的信息
/***********************************************************************************************
定义了堆栈类,提供压入和弹出操作,并提供了另外的便于遍历的操作
************************************************************************************************/
class STACK
{
public:
STACK();
~STACK();
bool Init(int s_max);
void s_push(STACK_ITEM & item);
STACK_ITEM s_pop(void);
STACK_ITEM s_one(int iter);//为了以后好遍历栈,提供一个访问栈中任意元素的接口
int Get_top(void);
void Refresh(int iter,int x, int y); // 这里是为了可以改变栈中的值
private:
int max_items;
int top; //在这里约定,top指向最上面元素的上面的位置
STACK_ITEM * stack;
};