栈
来源:互联网 发布:socket网络编程视频 编辑:程序博客网 时间:2024/06/05 00:49
栈
栈实际上也是一种线性结构,可以使用链表进行描述。与之不同的是栈结构的压栈(插入)和弹栈(删除)操作只能基于栈顶的数据元素。故栈是一种先进后出结构。
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;}
1 0