全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++利用链表写一个简单的栈实例详解

C++中其实有stack的模板类。功能更为强大。

自己写一个栈能让我们对栈这种数据结构更加熟悉。这个栈有一个不足之处就是里面存放的元素类型只能为int。

#include <iostream>
using namespace std;
class Stack
{
private:
  struct Node
  {
    int data;
    Node *next;
  };
  Node *head;
  Node *p;
  int length;

public:
  Stack()
  {
    head = NULL;
    length = 0;
  }
  void push(int n)//入栈
  {
    Node *q = new Node;
    q->data = n;
    if (head == NULL)
    {
      q->next = head;
      head = q;
      p = q;
    }
    else
    {
      q->next = p;
      p = q;
    }
    length ++;
  }

  int pop()//出栈并且将出栈的元素返回
  {
    if (length <= 0)
    {
      abort();
    }
    Node *q;
    int data;
    q = p;
    data = p->data;
    p = p->next;
    delete(q);
    length --;
    return data;
  }
  int size()//返回元素个数
  {
    return length;
  }
  int top()//返回栈顶元素
  {
    return p->data;
  }
  bool isEmpty()//判断栈是不是空的
  {
    if (length == 0)
    {
      return true;
    }
    else
    {
      return false;
    }
  }
  void clear()//清空栈中的所有元素
  {
    if (length > 0)
    {
      pop();
    }
  }
};
int main()
{
  //以下为测试代码
  Stack s;
  s.push(1);
  s.push(2);
  s.push(3);
  while(!s.isEmpty())
  {
    cout<<s.pop()<<endl;
  }
  return 0;
}

对这段代码稍加修改,这个栈就能存放其他类型的元素

#include <iostream>
using namespace std;
template<class T>class Stack
{
private:
  struct Node
  {
    T data;
    Node *next;
  };
  Node *head;
  Node *p;
  int length;

public:
  Stack()
  {
    head = NULL;
    length = 0;
  }
  void push(T n)//入栈
  {
    Node *q = new Node;
    q->data = n;
    if (head == NULL)
    {
      q->next = head;
      head = q;
      p = q;
    }
    else
    {
      q->next = p;
      p = q;
    }
    length ++;
  }

  T pop()//出栈并且将出栈的元素返回
  {
    if (length <= 0)
    {
      abort();
    }
    Node *q;
    int data;
    q = p;
    data = p->data;
    p = p->next;
    delete(q);
    length --;
    return data;
  }
  int size()//返回元素个数
  {
    return length;
  }
  T top()//返回栈顶元素
  {
    return p->data;
  }
  bool isEmpty()//判断栈是不是空的
  {
    if (length == 0)
    {
      return true;
    }
    else
    {
      return false;
    }
  }
  void clear()//清空栈中的所有元素
  {
    while(length > 0)
    {
      pop();
    }
  }
};
int main()
{
  Stack<char> s;
  s.push('a');
  s.push('b');
  s.push('c');
  while(!s.isEmpty())
  {
    cout<<s.pop()<<endl;
  }
  return 0;
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C++链表  #   # C++链表与栈  # C语言数据结构之使用链表模拟栈的实例  # 清空  # 就能  # 这段  # 数据结构  # 希望能  # 能让  # 谢谢大家  # 能为  # 不足之处  # 有一个  # std  # namespace  # gt  # iostream  # Stack  # data  # Node  # private  # struct  # int 


相关文章: 建站之星代理平台如何选择最佳方案?  红河网站制作公司,红河事业单位身份证如何上传?  如何配置支付宝与微信支付功能?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  网站制作企业,网站的banner和导航栏是指什么?  如何确保西部建站助手FTP传输的安全性?  建站之星如何快速解决建站难题?  如何登录建站主机?访问步骤全解析  网站制作公司排行榜,抖音怎样做个人官方网站  建站主机系统SEO优化与智能配置核心关键词操作指南  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  c# 在ASP.NET Core中管理和取消后台任务  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  如何在云虚拟主机上快速搭建个人网站?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  如何快速使用云服务器搭建个人网站?  如何彻底删除建站之星生成的Banner?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  已有域名能否直接搭建网站?  制作电商网页,电商供应链怎么做?  个人网站制作流程图片大全,个人网站如何注销?  购物网站制作公司有哪些,哪个购物网站比较好?  建站之星云端配置指南:模板选择与SEO优化一键生成  制作门户网站的参考文献在哪,小说网站怎么建立?  太原网站制作公司有哪些,网约车营运证查询官网?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  建站之星北京办公室:智能建站系统与小程序生成方案解析  如何在腾讯云服务器上快速搭建个人网站?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  如何选择高效响应式自助建站源码系统?  建站VPS推荐:2025年高性能服务器配置指南  建站主机如何选?高性价比方案全解析  如何用PHP快速搭建CMS系统?  公司网站设计制作厂家,怎么创建自己的一个网站?  股票网站制作软件,网上股票怎么开户?  C#怎么创建控制台应用 C# Console App项目创建方法  建站之星展会模板:智能建站与自助搭建高效解决方案  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  大连网站设计制作招聘信息,大连投诉网站有哪些?  江苏网站制作公司有哪些,江苏书法考级官方网站?  家庭服务器如何搭建个人网站?  招贴海报怎么做,什么是海报招贴?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何高效利用200m空间完成建站?  实现虚拟支付需哪些建站技术支撑? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。