c++基于链表的栈结构, 支持模板

找了很多栈的文章,都是用的数组作为栈结构,这样就会有大小限制,并且在使用的时候还得设置一下大小,并不能上手就直接使用,这样一点都不帅。所以我决定自己写一个,栈+模板+链表,这样什么东西都能装并且不需要设置大小。对了,你要是问我为什么不用stl的栈?自己写一个不帅吗?并且也不复杂,还锻炼了动手能力!好了不废话了,直接看代码吧。

template<class T>
struct Node
{
    T *data;
    Node<T> *next;
};

template <class T>
class Stack {

private:
    Node<T> *top_m;

public:
    void push(T const&t) // 入栈
    {
        Node<T> *temp=new Node<T>;//这一步是一定要有的,因为需要一个实体化(就是具有内存空间)的节点
        temp->data=new T(t);
        temp->next=top_m;
        top_m=temp;
    }

    void pop()// 出栈
    {
        Node<T> *temp;
        temp=top_m;
        top_m=top_m->next;
        delete temp;
    }
    T top() const //返回栈顶元素
    {
        return *top_m->data;
    }
};

看看使用效果咋样:

int main()
{
 	Stack<int> stack_int;
    stack_int.push(1);
    stack_int.push(2);
    printf("%d ",stack_int.top());
    stack_int.push(3);
    stack_int.push(4);
    stack_int.pop();
    printf("%d ",stack_int.top());
    stack_int.pop();
    stack_int.pop();
    printf("%d \n",stack_int.top());
    
    return 0}

输出:

2 3 1

使用模板:

//定义一个Student结构体
struct student
{
    student(const char *name_m,int age_m)
    {
        strcpy(name,name_m);
        age=age_m;
    }
    char name[10];
    int age;
};
int main()
{
 	Stack<struct student> stack_s;
    student s1={"sxc",18};
    stack_s.push(s1);
    stack_s.push(student("aabb",20));
    printf("name:%s,age:%d\n",stack_s.top().name,stack_s.top().age);
    stack_s.pop();
    printf("name:%s,age:%d\n",stack_s.top().name,stack_s.top().age);
    
    return 0}

输出:

name:aabb,age:20
name:sxc,age:18

我自己也就测试了这两个例子,不保证其他类型不出问题,有问题直接私信就行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值