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 }
原文地址:https://www.cnblogs.com/wangshujing/p/6914658.html