一道关于栈的习题,大家进来帮帮忙.

溺亡的鱼 2007-04-17 11:38:41
题目如下:
编写一个类,实现简单的栈.栈中有以下操作:元素入栈,读出栈顶元素值,退栈,判断栈顶空否.如果栈溢出,程序终止.栈的数据成员由10个整形的数组构成.先后做如下操作:
创建栈;
将10入栈;
将12入栈;
将14入栈;
读出并输入栈顶元素;
退栈;
读出并输出栈顶元素.

编了一晚上还是不会应用栈,创建栈老出一大堆错误.请大家帮帮我解这道题,顺便问一下友元类定义时,设置的形参中一定要包括所要访问的所有类么?
...全文
306 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
溺亡的鱼 2007-04-20
  • 打赏
  • 举报
回复
如果要是直接使用STL的栈,怎么使用呢?
溺亡的鱼 2007-04-20
  • 打赏
  • 举报
回复
谢谢大家的指点.
jixingzhong 2007-04-18
  • 打赏
  • 举报
回复
http://www.kpwang.com/c_c++/1106422113113.htm
nickyzeus7891 2007-04-18
  • 打赏
  • 举报
回复
实现为:
STACK::STACK()
{
this->max_items = 0;
this->stack = NULL;
top = 0;
}

STACK::~STACK()
{
if(this->top > 0)
delete [] stack;

stack = NULL;
top = 0;
max_items = 0;
}


bool STACK::Init(int s_max)
{
top = 0;

max_items = s_max;

stack = new STACK_ITEM[max_items + 1];

if(stack == NULL)
{
MessageBox(NULL,"Error:the stack can't be initialized!","Error",MB_OK);
return false;
}

for(int i = 0; i< max_items +1;i++)
{
stack[i].x = 0;
stack[i].y = 0;
stack[i].half_width = 0;
stack[i].is_moving = false;
}

return true;
}


void STACK::s_push(STACK_ITEM & item)
{
if( top >= max_items )
{
MessageBox(NULL,"Error,The stack is full!","Error",MB_OK);
exit(0);
}
else
this->stack[top] = item;
++top;
}

STACK_ITEM STACK::s_pop(void)
{
if(this->top <= 0)
{
MessageBox(NULL,"Error,There is no item in the stack","Error",MB_OK);
exit(0);
}
else
{
--top;
return (stack[top]);
}


}

STACK_ITEM STACK::s_one(int iter)
{
if(top > 0){
if(iter < top && iter > -1)
return ( stack[iter] );
}
}

int STACK::Get_top(void)
{
return top;
}

void STACK::Refresh(int iter,int x,int y)
{
if(iter < 0 || iter >= top )
{
MessageBox(NULL,"Error,can't refresh the item!","Error",MB_OK);
return;
}

else
{
stack[iter].x = x;
stack[iter].y = y - (2 * iter + 1) * HALF_RECT_HEIGHT;
}
}
nickyzeus7891 2007-04-18
  • 打赏
  • 举报
回复
以前写了一个栈的类:
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;
};

snprintf 2007-04-18
  • 打赏
  • 举报
回复
#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;
}

holmesyj 2007-04-18
  • 打赏
  • 举报
回复
喜欢snprintf写的,C++ Primer上有这个详细的介绍,楼主可以参考下

65,212

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧