题解 | #【模板】栈#
【模板】栈
https://www.nowcoder.com/practice/104ce248c2f04cfb986b92d0548cccbf
#include <cstdio> #include <cstdlib> #include <iostream> #include <string> using namespace std; typedef struct LNode { int data; struct LNode* next; } LNode, *LinkStack ; // 初始化一个链栈 bool Init(LinkStack& S) { // 创建一个头结点 S = (LNode*)malloc(sizeof(LNode)); // 分配空间失败 if (S == NULL) return false; // 让头结点指向NULL S->next = NULL; return true; } // 入栈 bool Push(LinkStack& S, int x) { // S是非法栈 if (S == NULL) return false; // 创建一个数据节点 LNode* n = (LNode*)malloc(sizeof(LNode)); n->data = x; // 数据结点指后段链表 n->next = S->next; // 头结点指向数据结点 S->next = n; return true; } // 出栈 bool Pop(LinkStack& S, int& x) { // 判断栈空 if (S->next == NULL) return false; // 临时指针指向要释放的结点 LNode* p = S->next; // 头结点指向新的第一数据结点 S->next = p->next; // 存数据,销毁结点 x = p->data; free(p); return true; } // 查栈顶 bool GetTop(LinkStack& S, int& x) { // 判断是否有栈顶元素 if (S->next == NULL)return false; x = S->next->data; return true; } int main() { LinkStack S; Init(S); std::string a, b; int n; cin >> n; for (int i = 0; i < n; i++) { string op; cin >> op; if (op == "push") { int x; cin >> x; if (!Push(S, x)) { cout << "error" << endl; }; } if (op == "pop") { int x; if (!Pop(S, x)) { cout << "error" << endl; } else cout << x << endl; } int y; if (op == "top") { if (!GetTop(S, y)) { cout << "error" << endl; } else cout << y << endl; } } }