C++ 栈 (链表实现)

第一、基本概念

栈中的元素遵守“先进后出”的原则(LIFO,Last In First Out)

  只能在栈顶进行插入和删除操作

  压栈(或推入、进栈)即push,将数据放入栈顶并将栈顶指针加一

  出栈(或弹出)即pop,将数据从栈顶删除并将栈顶指针减一

  栈的基本操作有:poppush判断空获取栈顶元素求栈大小

第二、实现方式

 栈一般 采用数组或者链表2中方式实现,各有各的特点,我这里采用倒插法链表实现

第三、代码实现

#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;
}
View Code

测试

#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"; 
}

 

posted @ 2018-12-22 23:32  lance2008  阅读(1005)  评论(0编辑  收藏  举报