c++利用链表写一个简单的栈
2015-11-16 19:47
585 查看
c++中其实有stack的模板类。功能更为强大。
自己写一个栈能让我们对栈这种数据结构更加熟悉。这个栈有一个不足之处就是里面存放的元素类型只能为int。
对这段代码稍加修改,这个栈就能存放其他类型的元素
自己写一个栈能让我们对栈这种数据结构更加熟悉。这个栈有一个不足之处就是里面存放的元素类型只能为int。
#include <iostream> using namespace std; class Stack { private: struct Node { int data; Node *next; }; Node *head; Node *p; int length; public: Stack() { head = NULL; length = 0; } void push(int n)//入栈 { Node *q = new Node; q->data = n; if (head == NULL) { q->next = head; head = q; p = q; } else { q->next = p; p = q; } length ++; } int pop()//出栈并且将出栈的元素返回 { if (length <= 0) { abort(); } Node *q; int data; q = p; data = p->data; p = p->next; delete(q); length --; return data; } int size()//返回元素个数 { return length; } int top()//返回栈顶元素 { return p->data; } bool isEmpty()//判断栈是不是空的 { if (length == 0) { return true; } else { return false; } } void clear()//清空栈中的所有元素 { if (length > 0) { pop(); } } }; int main() { //以下为测试代码 Stack s; s.push(1); s.push(2); s.push(3); while(!s.isEmpty()) { cout<<s.pop()<<endl; } return 0; }
对这段代码稍加修改,这个栈就能存放其他类型的元素
#include <iostream> using namespace std; template<class T>class Stack { private: struct Node { T data; Node *next; }; Node *head; Node *p; int length; public: Stack() { head = NULL; length = 0; } void push(T n)//入栈 { Node *q = new Node; q->data = n; if (head == NULL) { q->next = head; head = q; p = q; } else { q->next = p; p = q; } length ++; } T pop()//出栈并且将出栈的元素返回 { if (length <= 0) { abort(); } Node *q; int data; q = p; data = p->data; p = p->next; delete(q); length --; return data; } int size()//返回元素个数 { return length; } T top()//返回栈顶元素 { return p->data; } bool isEmpty()//判断栈是不是空的 { if (length == 0) { return true; } else { return false; } } void clear()//清空栈中的所有元素 { if (length > 0) { pop(); } } }; int main() { Stack<char> s; s.push('a'); s.push('b'); s.push('c'); while(!s.isEmpty()) { cout<<s.pop()<<endl; } return 0; }
相关文章推荐
- 转:c/c++内存释放知识总结
- 《C++并发编程实战》读书笔记6---设计并发代码
- C语言:调整数组使奇数全部都位于偶数前面。
- c/c++内存释放知识总结
- C语言:使用main函数的参数,实现一个整数计算机。
- c++非可变序列算法
- 《MORE EFFECTIVE C++》条款20 条款21
- 《C++编程风格》摘要
- 【LeetCode-283】Move Zeroes(C++)
- Sublime Text2配置C++编译环境
- qml与c++混合编程之简单demo说明
- oc语言学习之基础知识点介绍(一):OC介绍
- C++ Assert()
- c++ 内存管理
- JAVA调用c/c++代码
- 15.c/c++程序员面试宝典-内存分配
- c++析构函数没有执行
- C# 调用C/C++回调函数
- 探究C语言中的前++和后++
- 探究C语言中的前++和后++