zoukankan      html  css  js  c++  java
  • C++中利用链表实现一个栈

    在实现栈之前应该思考栈的一些用法:

    push

    pop

    top

    isempty

    想清楚栈顶的组成;

    下面是实现代码:

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 typedef int dataType;
     6 
     7 struct node        //链栈节点
     8 {
     9     dataType val;   //数值
    10     node *next;     //指针域
    11 };
    12 
    13 class lstack
    14 {
    15 public:
    16     lstack();
    17     ~lstack();
    18     void push(dataType var); //压栈
    19     void pop();                    //出栈
    20     dataType topval();                //取栈顶元素
    21     bool isEmpty();             //判断是否为空
    22 private:
    23     node * top;                    //栈顶指针,top等于NULL表示空栈
    24 };
    25 
    26 lstack::lstack()
    27 {
    28     top = NULL;                    //top等于NULL表示栈为空
    29 }
    30 
    31 lstack::~lstack()
    32 {
    33     node *ptr = NULL;
    34     while(top != NULL){
    35         ptr = top->next;
    36         delete top;
    37         top = ptr;
    38     }
    39 }
    40 
    41 void lstack::push(dataType a)
    42 {
    43     node *ptr = new node;
    44     ptr->val = a;                //新栈顶存值
    45     ptr->next = top;            //新栈顶指向旧栈顶
    46     top = ptr;                  //top指向新栈顶
    47 }
    48 
    49 void lstack::pop()
    50 {
    51     node *ptr = top->next;        //预存下一节点的指针
    52     delete top;                    //释放栈顶空间
    53     top = ptr;                    //栈顶变化
    54 }
    55 
    56 dataType lstack::topval()
    57 {
    58     return top->val;            //返回栈顶元素,并不判断栈是否已空
    59 }
    60 
    61 bool lstack:: isEmpty()
    62 {
    63     return top == NULL;         //栈顶为NULL表示栈空
    64 }
    65 
    66 int main()
    67 {
    68     lstack test;                // test 为链表构成的栈
    69     int i=0;
    70     for(i=0;i<10;i++)
    71     {
    72         test.push(i);
    73     }
    74     cout<<"栈中的值为:"<<endl;
    75     for(i=0;i<10;i++)
    76     {
    77         if(!test.isEmpty())
    78         {
    79             cout<<test.topval()<<endl;
    80             test.pop();
    81         }
    82     }
    83     return 0;
    84 }
  • 相关阅读:
    .NET Page对象各事件执行顺序
    允许webservice远程在ie里面调用配置方法
    sea.js模块化编程
    atom配置web开发环境
    CSS代码规范
    HTML DOM总结
    10分钟写一个markdown编辑器
    sea.js详解
    圣杯布局 双飞翼布局
    Spring学习(1)
  • 原文地址:https://www.cnblogs.com/wangshujing/p/6914658.html
Copyright © 2011-2022 走看看