#ifndef _STACK_H_
#define _STACK_H_
//数组实现
namespace stack_in_array
{
template <typename T>
class Stack
{
private:
enum { MAX = 100 };
T elements[MAX];
int top;
public:
void MakeNull();
bool Empty()const;
bool Full()const;
T Top()const;
void Pop();
void Push(T x);
};
template<typename T>
void Stack<T>::Push(T x)
{
if (Full())
cout << "FULL!\n";
else
{
top++;
elements[top] = x;
}
}
template<typename T>
void Stack<T>::Pop()
{
if (Empty())
cout << "EMPTY!\n";
else
top--;
}
template<typename T>
bool Stack<T>::Full()const
{
return top == MAX - 1;
}
template<typename T>
T Stack<T>::Top()const
{
if (Empty())
cout << "EMPTY!\n";
else
return elements[top];
return NULL;
}
template<typename T>
bool Stack<T>::Empty()const
{
if (top < 0)
return true;
else
return false;
}
template<typename T>
void Stack<T>::MakeNull()
{
top = -1;
}
}
//链表实现
namespace stack_in_linklist
{
template<typename T>
class Stack
{
private:
struct Node
{
T data;
struct Node *next;
};
Node *head;
public:
void MakeNull();
bool Empty()const;
void Push(T x);
void Pop();
T Top()const;
};
template<typename T>
T Stack<T>::Top()const
{
if (!Empty())
return head->next->data;
else
cout << "EMPTY!\n";
return NULL;
}
template<typename T>
void Stack<T>::Pop()
{
Node *p;
if (!Empty())
{
p = head->next;
head->next = p->next;
delete p;
}
else
cout << "EMPTY!\n";
}
template<typename T>
void Stack<T>::Push(T x)
{
Node *p = new Node;
p->data = x;
p->next = head->next;
head->next = p;
}
template<typename T>
bool Stack<T>::Empty()const
{
return head->next == NULL;
}
template<typename T>
void Stack<T>::MakeNull()
{
head = new Node;
s->next = NULL;
}
}
#endif
Stack--C++模板类
最新推荐文章于 2025-06-03 21:39:46 发布
本文介绍两种实现栈数据结构的方法:一种使用数组实现,另一种使用链表实现。文章提供了详细的C++代码示例,并解释了如何进行基本操作如Push、Pop等。
494

被折叠的 条评论
为什么被折叠?



