頭文件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 關注
- 1648 瀏覽
添加回答
舉報
0/150
提交
取消