栈的链表实现C++
2015-10-08 09:52
423 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/makaiiakam/article/details/48968991
数据结构复习,栈的链表实现,创建空栈时,需要有一个节点作为头结点。
#ifndef DATA_STRUCTURES #define DATA_STRUCTURES //Stack链表实现 class StackLinkedList { public: struct Node { int element; Node* next; }; StackLinkedList() = default; //"告诉"编译器生成默认构造,C++11新特性 StackLinkedList(Node* s); //创建栈 Node* CreateStack(); //判断栈是否为空 int IsEmpty(Node* s); void MakeEmpty(Node* s); //压栈 void Push(int ele, Node* s); //弹栈 void Pop(Node* s); }; #endif // DATA_STRUCTURES
#include <iostream> #include <assert.h> #include "datastructures.h" using namespace std; int StackLinkedList::IsEmpty(Node* s) { return (s->next == NULL); } void StackLinkedList::Pop(Node* s) { if(IsEmpty(s)){ cout << "Empty Stack!" << endl; return; }else{ Node* firstCell = s->next; s->next = firstCell->next; delete(firstCell); } } void StackLinkedList::MakeEmpty(Node* s) { if(s == NULL){ cout << "Error" << endl; return; }else{ while (!IsEmpty(s)) { Pop(s); } } } StackLinkedList::Node* StackLinkedList::CreateStack() //由于Node是类StackLinkedList中的结构体,做返回值时必须加域作用符 { Node* p = new Node; if(NULL == p) return NULL; p->next = NULL; MakeEmpty(p); return p; } void StackLinkedList::Push(int ele, Node* s) { assert(s); Node *ptrTemp = new Node; if(!ptrTemp) return; else{ ptrTemp->element = ele; ptrTemp->next = s->next; s->next = ptrTemp; } } int main() { cout << "Hello World!" << endl; return 0; }
相关文章推荐
- C++利用链表与模板实现栈
- C++ 链表实现
- c++实现线性表和双向链表
- 单链表赋值,定位,添加,(C++ ) 简单实现 未整理
- 简单数据结构之循环链表(C++实现)
- 链表的基本操作函数算法(C/C++实现)
- C++实现链表函数
- 用c++实现单向链表的创建,插入和删除
- C++专题之实现信息系统(抽象类、继承、链表)
- C++ 学习练手 - 双向链表的模板实现
- C++利用链表模板类实现一个简易队列
- C++链表的创建、插入、删除、查找、合并、排序、修改等操作的实现
- leetcode 链表里的两数相加 C++实现
- 面试题5:从尾到头打印链表的c++代码实现
- 单链表的C++实现
- C++循环链表之约瑟夫环的实现方法
- 链表的介绍及双向链表的实现c/c++/java
- c++实现链表的倒序操作
- [C++]Shared_ptr使用详解&&实现链表
- [C++]List with iterator(链表的迭代器实现)