第1、基本概念node
栈中的元素遵照“先进后出”的原则(LIFO,Last In First Out)ios
只能在栈顶进行插入和删除操做数组
压栈(或推入、进栈)即push,将数据放入栈顶并将栈顶指针加一ide
出栈(或弹出)即pop,将数据从栈顶删除并将栈顶指针减一测试
栈的基本操做有:pop,push,判断空,获取栈顶元素,求栈大小spa
第2、实现方式指针
栈通常 采用数组或者链表2中方式实现,各有各的特色,我这里采用倒插法链表实现code
第3、代码实现blog
#pragma once #include <iostream> using namespace std; template<class T> struct node { T value; //储存的值 node<T>* next; node() :next(nullptr) {}; node(T t) : value(t), next(nullptr) {} }; template <typename T> class Stack { int length; //入栈数量 node<T> *head; //栈的头部 public: Stack() { length = 0; head = new node<T>; } void push(T arg); //入栈 T pop(); //出栈 T top(); //获取栈顶元素 void print(); //打印栈 int size(); //获取栈内元素个数 bool isEmpty(); //判断空 }; template<typename T> void Stack<T>::push(T arg) { node<T>* pnode = new node<T>(arg); pnode->next = head->next; head->next = pnode; length++; } template<typename T> T Stack<T>::pop() { if (head->next!=NULL) { node<T>* pnode = head->next; T pdata = pnode->value; head->next = head->next->next; delete pnode; return pdata; } } template<typename T> T Stack<T>::top() { while (head->next!=NULL) { return head->next->value; } } template<typename T> void Stack<T>::print() { while (head->next != NULL) { head = head->next; cout << head->value << endl; } } template<typename T> int Stack<T>::size() { return length; } template<typename T> bool Stack<T>::isEmpty() { return length == 0; }
测试io
#include "pch.h" #include "Stack.h" #include <iostream> using namespace std; int main() { Stack<int> st; st.push(1); st.push(2); st.push(4); st.print(); std::cout << "Hello World!\n"; }