数据结构之栈
栈(stack)是限定仅在表尾进行插入和删除操作的线性表。其特点是:”后进先出“或”先进后出“。
一 标准库stack的使用
(1)stack成员函数
函数名 | 功能 | 复杂度 |
size() | 返回栈的大小 | O(1) |
top() | 返回栈顶元素 | O(1) |
push(x) | 向栈中添加元素 | O(1) |
pop() | 从栈中取出并删除元素 | O(1) |
empty() | 在栈为空时返回ture | O(1) |
(2)示例
#include "stdafx.h" #include<iostream> #include<stack> using namespace std; int main() { stack<int> S; S.push(3); S.push(7); S.push(1); cout << S.size() << " "; cout << S.top() << " "; S.pop(); cout << S.top() << " "; S.pop(); cout << S.top() << " "; S.push(5); cout << S.top() << " "; S.pop(); cout << S.top() << endl; return 0; }
二 C++实现栈
数组实现的栈,能存储任意类型的数据
#ifndef ARRAY_STACK_HXX #define ARRAY_STACK_HXX #include <iostream> #include "ArrayStack.h" using namespace std; template<class T> class ArrayStack{ public: ArrayStack(); ~ArrayStack(); void push(T t); T peek(); T pop(); int size(); int isEmpty(); private: T *arr; int count; }; // 创建“栈”,默认大小是12 template<class T> ArrayStack<T>::ArrayStack() { arr = new T[12]; if (!arr) { cout<<"arr malloc error!"<<endl; } } // 销毁“栈” template<class T> ArrayStack<T>::~ArrayStack() { if (arr) { delete[] arr; arr = NULL; } } // 将val添加到栈中 template<class T> void ArrayStack<T>::push(T t) { //arr[count++] = val; arr[count++] = t; } // 返回“栈顶元素值” template<class T> T ArrayStack<T>::peek() { return arr[count-1]; } // 返回“栈顶元素值”,并删除“栈顶元素” template<class T> T ArrayStack<T>::pop() { int ret = arr[count-1]; count--; return ret; } // 返回“栈”的大小 template<class T> int ArrayStack<T>::size() { return count; } // 返回“栈”是否为空 template<class T> int ArrayStack<T>::isEmpty() { return size()==0; } #endif