栈
栈实际上也是一种线性结构,可以使用链表进行描述。与之不同的是栈结构的压栈(插入)和弹栈(删除)操作只能基于栈顶的数据元素。故栈是一种先进后出结构。
1.定义结点类
struct StackNode
{
int val;
StackNode *next;
StackNode(int x = 0xFFFF)
:val(x), next(nullptr) {}
};
2.定义栈类
class LinkedStack
{
public:
LinkedStack(int len = 0);
~LinkedStack();
bool StackEmpty();
void StackClear();
int GetTop();
void Push(int const e);
void Pop();
int GetLen();
void printStack();
private:
int StackLen;
StackNode *StackTop;
};
StackEmpty 方法:判断栈是否为空;
StackClear 方法:清空整个栈;
GetTop 方法:得到栈顶数据元素;
Push 方法:压栈操作;
Pop 方法:弹栈操作;
GetLen 方法:得到栈的长度;
printStack 方法:打印栈。
3.方法实现
LinkedStack::LinkedStack(int len)
:StackLen(len)
{
StackTop = new StackNode();
}
LinkedStack::~LinkedStack()
{
StackClear();
delete StackTop;
}
bool LinkedStack::StackEmpty()
{
return StackTop == nullptr;
}
void LinkedStack::StackClear()
{
StackNode *p = StackTop;
while (StackTop)
{
StackTop = p->next;
delete p;
p = StackTop;
}
}
int LinkedStack::GetTop()
{
if (StackTop==nullptr)
{
return 0xFFFF;
}
else
{
return StackTop->val;
}
}
void LinkedStack::Push(int const e)
{
StackNode *p = new StackNode(e);
p->next = StackTop;
StackTop = p;
StackLen += 1;
}
void LinkedStack::Pop()
{
StackNode *p = StackTop;
if (!StackEmpty())
{
StackTop = p->next;
delete p;
}
}
int LinkedStack::GetLen()
{
return StackLen;
}
void LinkedStack::printStack()
{
StackNode *p = StackTop;
if (StackEmpty())
{
return;
}
while (p->next)
{
std::cout << p->val << std::endl;
std::cout << "||" << std::endl;
p = p->next;
}
std::cout << p->val << std::endl;
}