头文件LinkStack.h
#ifndef LINKSTACK_H //如果没有定义该 头文件,就执行以下的(define),否则就直接endif(避免二次调用
#define LINKSTACK_H
template<class DataType> //模板类
class LinkStack //链栈定义
{
public:
LinkStack(); //构造函数
~LinkStack(); //析构函数
void Push(DataType x); //入栈,增加
DataType Pop(); //出栈,删除
DataType GetTop(); //取栈顶元素,不删除
int Empty(); //判空
private:
Node<DataType> *top //栈顶指针
};
#endif
源文件LinkStack.cpp
#include<iostream>
using namespace std;
#include "LinkStack.h" //包含头文件
template<class DataType>
LinkStack<DataType>::LinkStack() //
{
top=NULL; //栈顶指针初始化为空
}
template<class DataType>
LinkStack<DataType>::~LinkStack() //析构函数
{
}
template<class DataType>
void LinkStack<DataType>::Push(DataType x)
{
s=new Node; s->data=x; //申请一个数据域为x的节点s,next指向
s->next=top; top=s; //将节点s插在栈顶
}
template<class DataType>
DataType LinkStack<DataType>::Pop()
{
if(top==NULL) throw "下溢"; //
x=top->data; p=top;
top=top->next;
delete p;
return x;
}
template<class DataType>
DataType GetTop()
{
if(top!= NULL) //不删除
return top->data;
}
template<class DataType>
int Empty()
{
top==NULL ? return 1:return 0;
}
主函数文件LinkStackMain.cpp
#include<iostream>
using namespace std;
#include"LinkStack.cpp"
void main()
{
LinkStack<int> L; //实例化类对象
if(L.Empty()==1) //判空
cout<<"栈为空"<<endl;
else cout<<"栈为非空"<<endl;
L.Push(2); //依次入栈
L.Push(3);
cout<<"栈顶元素为:"<<L.GetTop()<<endl; //取栈顶元素
//cout<<"出栈:"<<L.Pop()<<endl;
cout<<"出栈:"<<endl;
L.Pop();
cout<<"栈顶元素为:"<<L.GetTop()<<endl; //出栈一次,栈顶元素改变
system("pause");
}
1 回答
onemoo
TA贡献883条经验 获得超454个赞
出了错误先看报的是什么错! 说说报错是什么?
目测就有几个问题:
LinkStackMain.cpp中你include了LinkStack.cpp文件,这直接就会引起重定义错误。永远不要include包含实现的.cpp文件!
我没看到Node类型的定义
- 1 回答
- 0 关注
- 1584 浏览
添加回答
举报
0/150
提交
取消