代码改变世界

栈 的实现

  youxin  阅读(240)  评论(0编辑  收藏  举报

 栈有 2种实现:一种使用队列,另一种使用链表。

  当栈中有n个项时,这一实现用s[0],s[1],,..s[N-1]来保存他们。下面的代码并未实现对诸如向一个满栈中压入元素(或者从一个空栈中弹出元素)这类操作的错误检测

复制代码
template<class T>
class Stack
{
private:
    T *s;
    int n;
public:
   Stack(int maxN)
   {
       s=new T[maxN];
       n=0;
   }
   int empty() const { return n==0;}
   void push(T t)
   {
       s[n++]=t;
   }
   T pop()
   {
       return s[--n];
   }
};
复制代码

 

 用链表实现:

复制代码
#include<iostream>
using namespace std;
template<class T>
class Stack
{
private:
    struct node
    {
        T t;
        node *next;
        node(T x,node *t):t(x),next(t){ }
    };
    typedef node *Link;
    Link head;
public:
    Stack( )
    {
        head=0;
    }

    int empty() const { return head==0;}

    void push(T x)
    {
        head=new node(x,head);
    }

    T pop()
    {
        Link t=head->next;
           T v=head->t;
         
         delete head;
         head=t;
         return v;
    }
};

int main()
{
    Stack<int> s;
    for(int i=0;i<10;i++)
        s.push(i);
    for(int i=0;i<10;i++)
      cout<<s.pop()<<ends;
}
复制代码

注意,链表构造时是从右向左

 

 

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2011-07-30 上网能避免浅薄么?
点击右上角即可分享
微信分享提示