在实现栈之前应该思考栈的一些用法:
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
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/254457
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!