欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++ 栈 (链表实现)

程序员文章站 2022-09-04 14:06:09
第一、基本概念 栈中的元素遵守“先进后出”的原则(LIFO,Last In First Out) 只能在栈顶进行插入和删除操作 压栈(或推入、进栈)即push,将数据放入栈顶并将栈顶指针加一 出栈(或弹出)即pop,将数据从栈顶删除并将栈顶指针减一 栈的基本操作有:pop,push,判断空,获取栈顶 ......

第一、基本概念

栈中的元素遵守“先进后出”的原则(lifo,last in first out)

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

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

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

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

C++ 栈 (链表实现)

第二、实现方式

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

C++ 栈 (链表实现)

第三、代码实现

C++ 栈 (链表实现)
#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"; 
}

C++ 栈 (链表实现)