一个链栈有些地方不行大家帮忙改改

0c0c0f 2012-04-06 11:02:01
#include<iostream>
using namespace std;
template<class DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};
template<class DataType>
class LinkStack
{
private:
Node<DataTpe> *top;
public:
LinkStack()
{
top=new Node;
top->next=NULL;
}
void Push(DataType x)
{
Node<DataType> s;
s=new Node;
s->next=top;
top=s;
}
DataType Pop()
{
Node<DataType> *p;//定义记录栈顶元素的指针
p=top;
top=top->next;
return p->data;//实现返回还是先return?
delete p;
}
DataType GetTop()
{
cout<<top->data<<endl;
return top->data;
}
bool Empty()
{
if(top->next==NULL)
return false;
else
return true;
}

};
void main()
{
LinkStack<int> S;
}
...全文
62 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
0c0c0f 2012-04-06
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
template<class DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};
template<class DataType>
class LinkStack
{
private:
Node<DataType> *top;
public:
LinkStack()
{
top=new Node<DataType>();
top->next=NULL;
}
void Push(DataType x)
{
Node<DataType> *s;
s=new Node<DataType>();
s->data=x;
s->next=top;
top=s;
}
DataType Pop()
{
Node<DataType> *p;//定义记录栈顶元素的指针
p=top;
DataType t=p->data;
top=top->next;
cout<<t<<endl;
delete p;
return t;//实现返回还是先return?
}
DataType GetTop()
{
cout<<top->data<<endl;
return top->data;
}
bool Empty()
{
if(top->next==NULL)
return false;
else
return true;
}

};
void main()
{
LinkStack<int> S;
S.Push(1);
S.Pop();
}
mngzilin 2012-04-06
  • 打赏
  • 举报
回复
s=new Node<DataType> node;
--------------------
你上面这句怎么回事?

s=new Node<DataType>();
0c0c0f 2012-04-06
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
template<class DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};
template<class DataType>
class LinkStack
{
private:
Node<DataType> *top;
public:
LinkStack()
{
top=new Node<DataType> node;
top->next=NULL;
}
void Push(DataType x)
{
Node<DataType> s;
s=new Node<DataType> node;
node->data=x;
s->next=top;
top=s;
}
DataType Pop()
{
Node<DataType> *p;//定义记录栈顶元素的指针
p=top;
DataType t=p->data;
top=top->next;
delete p;
return t;//实现返回还是先return?
}
DataType GetTop()
{
cout<<top->data<<endl;
return top->data;
}
bool Empty()
{
if(top->next==NULL)
return false;
else
return true;
}

};
void main()
{
LinkStack<int> S;
S.Push(1);
S.Pop();
}
错误 2 error C2065: “node”: 未声明的标识符 d:\c++\数据结构\链栈\链栈\linkstack.cpp 17 1 链栈
mngzilin 2012-04-06
  • 打赏
  • 举报
回复
指针就不正确了,不能释放data
cccztw 2012-04-06
  • 打赏
  • 举报
回复
不好意思 不是很懂
mngzilin 2012-04-06
  • 打赏
  • 举报
回复
测试下最指针的效果:

void main()
{
LinkStack<int> S;
S.Push(1);
S.Push(2);
S.Push(3);
S.Push(4);

LinkStack<LinkStack<int>*> S2;
S2.Push(&S);
S2.Push(&S);
S2.Push(&S);
S2.Push(&S);

cout<<S2.Pop()->Pop()<<endl;

getchar();
}
SaeWind 2012-04-06
  • 打赏
  • 举报
回复
mngzilin 2012-04-06
  • 打赏
  • 举报
回复
这个地方也不对:

void Push(DataType x)
{
Node<DataType> *s;
s=new Node<DataType>;//指针申明new
s->data=x;//丢了一句
s->next=top;
top=s;
}

void GetTop()
{
cout<<Pop()<<endl;//直接调用pop,无返回值
}

mngzilin 2012-04-06
  • 打赏
  • 举报
回复
上面错了:

DataType t=p->data;
delete p;
return t;//实现返回还是先return?
mngzilin 2012-04-06
  • 打赏
  • 举报
回复
你这个栈既然是存储的栈,那就直接:
	Node<DataType> *p;//定义记录栈顶元素的指针
p=top;
top=top->next;


DataType t=p->data;
delete p;
return p->data;//实现返回还是先return?
seraphgxh 2012-04-06
  • 打赏
  • 举报
回复
void Push(DataType x) 这个函数好像有问题,x没被保存。
0c0c0f 2012-04-06
  • 打赏
  • 举报
回复
如果delete了,还怎么return呢
bdmh 2012-04-06
  • 打赏
  • 举报
回复
return p->data;//实现返回还是先return?
delete p;

你return了,还怎么delete

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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