链栈实现(C++)

typedef int DataType; struct Node{ DataType entry; Node * next; Node(); Node(DataType item, Node * add_on = NULL); }; class DyStack{ public: DyStack(); bool empty() const; ErrorCode push(const DataType &item); ErrorCode pop(); ErrorCode top(DataType &item) const; ~DyStack(); DyStack(const DyStack &origin); void operator = (const DyStack &origin); protected: Node * top_node; }; Node::Node() { next = NULL; } Node::Node(DataType item, Node * add_on) { entry = item; next = add_on; } DyStack::DyStack() { top_node = NULL; } bool DyStack::empty() const { if(top_node == NULL) return true; else return false; } ErrorCode DyStack::push(const DataType &item) { ErrorCode outcome = success; Node * pNew = new Node(item, top_node); if(pNew == NULL) outcome = overflow; else top_node = pNew; return outcome; } ErrorCode DyStack::pop() { ErrorCode outcome = success; if(top_node == NULL) outcome = underflow; else { Node * p = top_node; top_node = top_node->next; delete p; } return outcome; } ErrorCode DyStack::top(DataType &item) const { ErrorCode outcome = success; if(top_node == NULL) outcome = underflow; else item = top_node->entry; return outcome; } DyStack::~DyStack() { while(!empty()) pop(); } DyStack::DyStack(const DyStack &origin) { Node *new_copy, *origin_node=origin.top_node; if(origin.top_node == NULL) top_node = NULL; else { new_copy=top_node=new Node(origin_node->entry); while(origin_node->next!=NULL) { origin_node=origin_node->next; new_copy->next=new Node(origin_node->entry); new_copy=new_copy->next; } } } void DyStack::operator=(const DyStack &origin) { Node *new_top, *new_copy, *origin_node=origin.top_node; if(origin.top_node == NULL) new_top = NULL; else { new_copy=new_top=new Node(origin_node->entry); while(origin_node->next!=NULL) { origin_node=origin_node->next; new_copy->next=new Node(origin_node->entry); new_copy=new_copy->next; } } while(!empty()) pop(); top_node=new_top; }
注意几个问题:
1、析构函数
当对象离开作用域范围时,用来释放其占用的资源。一般情况下,需要手动编写析构函数时,都要进行重载赋值运算符和拷贝构造函数。
2、重载赋值运算符
3、拷贝构造函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库