C++之链栈
#include <iostream>using namespace std;template <class T>class LinkNode {template <class T>friend class LinkStack;public:LinkNode() {next = NULL;}private:T data;LinkNode<T>* ne
·
#include <iostream>
using namespace std;
template <class T>
class LinkNode {
template <class T>
friend class LinkStack;
public:
LinkNode() {
next = NULL;
}
private:
T data;
LinkNode<T>* next;
};
template <class T>
class LinkStack {
public:
LinkStack();
~LinkStack();
bool IsEmpty() const;//判空
bool Push(const T& x);//入栈
bool Top(T& x);//取栈顶值
bool Pop(T& x);//出栈
void outPut(ostream& out) const;//输出
private:
LinkNode<T>* top;//栈顶结点
int size;//栈中元素个数
};
template<class T>
LinkStack<T>::LinkStack()
{
top = NULL;
size = 0;
}
template<class T>
LinkStack<T>::~LinkStack()
{
T x;
while (top != NULL)
Pop(x);
}
template<class T>
bool LinkStack<T>::IsEmpty() const
{
return top==NULL;
}
template<class T>
bool LinkStack<T>::Push(const T& x)
{
LinkNode<T>* p = new LinkNode<T>;
if (p == NULL)
return false;
else {
p->data = x;
p->next = top;
top = p;
size++;
return true;
}
}
template<class T>
bool LinkStack<T>::Top(T& x)
{
LinkNode<T>* p = new LinkNode<T>;
if (p == NULL)
return false;
else {
x = top->data;
return true;
}
}
template<class T>
bool LinkStack<T>::Pop(T& x)
{
LinkNode<T>* p = new LinkNode<T>;
if (p == NULL)
return false;
else {
x = top->data;
p = top;//将p指向待删除结点
top = top->next;//top指向新的栈顶结点
delete p;
size--;
return true;
}
}
template<class T>
void LinkStack<T>::outPut(ostream& out) const
{
LinkNode<T> *p;
p = top;
for (int i = 0; i < size; i++) {
out << p->data << endl;
p = p->next;
}
}
template <class T>
ostream& operator<<(ostream& out, const LinkStack<T>& x) {
x.outPut(out);
return out;
}
int main() {
LinkStack<int> s;
return 0;
}
点击阅读全文
更多推荐
活动日历
查看更多
直播时间 2025-02-26 16:00:00


直播时间 2025-01-08 16:30:00


直播时间 2024-12-11 16:30:00


直播时间 2024-11-27 16:30:00


直播时间 2024-11-21 16:30:00


所有评论(0)