#include <iostream>
using namespace std;
const int StackSize = 100;
struct Node{
float data;
Node *next;
};
template <class DataType>
class LinkStack {
public:
LinkStack(){top=NULL;}//构造函数,初始化一个空链栈
~LinkStack() {}//析构函数
void Push(DataType x); // 入栈
DataType Pop(); // 出栈
int StackLength();//栈长
DataType GetTop(){if(top==NULL) throw"这是一个空栈";return top->data;}//取栈顶元素
bool isEmpty(){if(top==NULL) return true;else return false;} // 判断是否为空,空栈返回1,否则返回0
void StackTraverse(); // 输出栈
private:
int a;
DataType data[StackSize];
Node *top;
};
template <class DataType>
void LinkStack<DataType>::Push(DataType x) {
// if (top == StackSize-1) throw "上溢";
// data[++top] = x;
Node *s=new Node;
s->data=x;
s->next=top;
top=s;
}
template <class DataType>
DataType LinkStack<DataType>::Pop()
{
//if (top == -1) throw "下溢";
//DataType x = data[top--];
//return x;
if (top == NULL) throw "下溢";
float x=top->data;
Node *p=top;//暂存栈顶元素
top=top->next;//将栈顶结点摘链
delete p;
return x;
}
template <class DataType>
int LinkStack<DataType>::StackLength()
{
return top->data;}
template <class DataType>
void LinkStack<DataType>::StackTraverse()
{ if(isEmpty())
{ cout<<"此栈为空"<<endl;}
Node *node = top;
while(node->next != NULL){
cout<<node->data<<" ";
node = node->next;
}
cout<<node->data<<endl;
}
int main(int argc, const char * argv[]) {
LinkStack<int> s = LinkStack<int>();
cout << "isEmpty : " << s.isEmpty() << endl;
s.Push(86);
s.Push(99);s.Push(67);
s.Push(95);s.Push(88);
s.Push(78);s.Push(83);
s.Push(69);
cout<<"整个栈的长度为:"<<s.StackLength()<<endl;
cout<<"遍历整个栈:"<<endl;
s.StackTraverse();
cout << "判断此时表是否为空: " << s.isEmpty() << endl;
cout << "获取栈顶元素: " <<s.GetTop() << endl;
cout << "出栈: " << s.Pop() << endl;
cout << "出栈:" << s.Pop() << endl;
cout<<"遍历整个栈:"<<endl;
s.StackTraverse();
cout << "获取此时的栈顶: " <<s.GetTop() << endl;
return 0;
}
链栈
最新推荐文章于 2024-04-22 17:33:43 发布