栈的数组实现与链表实现
来源:互联网 发布:音频编辑软件哪个好 编辑:程序博客网 时间:2024/06/07 02:39
栈的说明
栈是一种基本的数据结构。在栈中,被删除的元素是最近被插入的元素,实现的是一种后进先出(last-in, first-out, LIFO)的策略。
改变栈中元素的操作方法只有两个——push与pop。push是把元素推入栈底,pop是把元素从栈顶弹出。
下面是push和pop的过程
图片来自《Data Structures and Program Design In C++》
数组实现
数组实现的思想很简单。利用一个变量count来记录栈顶,然后对数组进行操作。
图片来自《Data Structures and Program Design In C++》
template <class T>class Stack {private: static const int maxstack = 10; T entry[maxstack]; int count; int stackSize; bool full() const { return stackSize == maxstack; }public: Stack() : count(0), stackSize(0) { for (int i = 0; i < maxstack; i++) entry[i] = T(); } void push(const T &val) { if (!full()) { entry[count] = val; ++count; ++stackSize; } } void pop() { if (!empty()) { --count; --stackSize; } } T top() const { if (!empty()) return entry[count - 1]; } bool empty() const { return stackSize == 0 && count == 0; } int size() const { return stackSize; }};
链表实现
链表实现是以一个top_node作为链表的表头,标记栈顶,在此进行插入和删除操作
图片来自《Data Structures and Program Design In C++》
图片来自《Data Structures and Program Design In C++》
图片来自《Data Structures and Program Design In C++》
template <class T>class Stack {private: // 声明结点的结构体 struct Node { T data; Node *next; };private: Node *top_node; int stackSize;public: Stack() : top_node(NULL), stackSize(0) { } ~Stack_List() { while (!empty()) pop(); } // push将新来的元素添加到链表头 void push(const T &val) { Node *new_node = new Node; new_node->data = val; new_node->next = top_node; top_node = new_node; ++stackSize; } // pop把链表头即栈顶的元素弹出 void pop() { if (!empty()) { Node *temp = top_node; top_node = top_node->next; delete temp; --stackSize; } } T top() const { return top_node->data; } bool empty() const { return stackSize == 0 && top_node == NULL; } int size() const { return stackSize; }};
简单测试
#include <iostream>using namespace std;int main() { Stack<int> s; for (int i = 0; i < 11; i++) s.push(i); cout << s.size() << endl; while (!s.empty()) { cout << s.top() << " "; s.pop(); } cout << endl; return 0;}
数组实现的栈的测试结果
由于设定栈的最大容量为10,因此只有10个元素在栈内
链表实现的栈的测试结果
由于链表的长度是可增长的,因此能有11个元素在栈内
参考书籍
《Data Structures and Program Design In C++》
0 0
- 栈的链表实现 与 数组实现
- 栈的数组实现与链表实现
- 栈的实现(数组与链表实现)
- 队列的链表与数组实现
- 链表的实现与数组
- 队列的数组实现与链表实现
- 栈、队列、背包的数组与链表实现
- 栈—数组与链表实现
- java 队列与栈实现(链表与数组)
- 算法与数据结构 其二 数组和链表 的实现
- 数组索引实现栈的链表实现
- 栈的数组和链表实现
- 栈的数组和链表实现
- 约瑟夫环 数组与链表实现
- ⚔疯狂输出⚔ 数组实现与链表实现
- 栈的数组实现
- 栈的数组实现
- 栈的数组实现
- 架构设计:系统间通信(35)——被神化的ESB(下)
- 自己制作的播放器MeITo
- 命令行jarsigner签字和解决找不到证书链错误
- SLAM:数据集
- PHP框架开发教程(二) 文件分布
- 栈的数组实现与链表实现
- MySql生成.Net中Model类的存储过程
- android 打开文件的Intent及使用
- C++面试题 1-50
- 【Android基础知识】IntentService基本使用
- 控制台颜色设置
- HDU 1171 Big Event in HDU(01背包)
- Java基础知识IO流(拷贝文本文件)
- 整数哈希介绍