首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++ 栈的链式表示解决思路

2013-11-11 
c++栈的链式表示#includeiostreamusing namespace stdstruct Node{int dataNode* next}class LinkSt

c++ 栈的链式表示

#include<iostream>
using namespace std;


struct Node
{
int data;
Node* next;
};


class LinkStack
{
public:
LinkStack();
~LinkStack();
void  Push(int m);
int     Pop() ;
void  DispStack();
int     Getintop();
bool  Empty() const;
void  ClearStack();
LinkStack operator=( LinkStack& s)
{

int m;
while(s.Empty()!= 1)
{
m = s.Getintop();
cout<<m;
Push(m);

}

return *this;

}
private:
Node *top;
};


LinkStack::LinkStack()
{
top = NULL;
}


LinkStack::~LinkStack()
{
Node *p;
while(top)
{
p = top;
top = top->next;
delete p;
}
}


void LinkStack::Push(int m)
{
Node *s = new Node;
s->data = m;
s->next =top;
top = s;
}


int LinkStack::Pop() 
{
if(top == NULL)
{
cout<<"error";
return NULL;
}
Node *s;
s = top;
int m;
m = top->data;
top = top->next;
delete s;
return m;

}


int LinkStack::Getintop()
{
if(top ==NULL)
{
cout<<"error"<<endl;
return NULL;
}
else
return top->data;
}


bool  LinkStack::Empty() const
{
if(NULL == top)
return 1;
else
return 0;
}


void LinkStack::ClearStack()
{
Node *p;
while(top)
{
p = top;
top = top->next;
delete p;
}
}


void LinkStack::DispStack()
{
Node *s = top;
while(s)
{
cout<<s->data<<" ";
s = s->next;
}
cout<<endl;
}

#include<iostream>
#include "LinkStack.h"
using namespace std;

LinkStack conversion(int N)
{
LinkStack stack;
while(N)
{
stack.Push(N%8);

N = N/8;
}
/*while(!stack.Empty())
{
int m = stack.Pop();
cout<<m<<" ";
}*/
cout<<stack.Getintop()<<endl;
stack.DispStack();
return stack;

 }

int main()
{
int N;
cout<<"input the numbers"<<endl;
cin>>N;
LinkStack stack1;
stack1 = conversion(N);
//conversion(N);
while(!stack1.Empty())
{
int m = stack1.Pop();
cout<<m<<" ";
}

return 0;
}


stack1 = conversion(N) 这个地方 有问题 的不到正确答案, 程序崩溃,还请各位大哥帮忙看看
c++? 栈
[解决办法]
返回的是局部对象吧!函数调用完,对象也就被析构掉了!
[解决办法]

operator= 返回void
void operator= ( LinkStack& s)
{

int m;
while(s.Empty()!= 1)
{
m = s.Getintop();
cout<<m;
Push(m);
s.Pop(); //这里加个pop 。

}



}
[解决办法]
引用:
返回的是局部对象吧!函数调用完,对象也就被析构掉了!


顶一个,楼主要么在conversion()函数内部new一个LinkStack stack;,要么在conversion()的参数中传一个LinkStack stack;

热点排行