在实现栈之前应该思考栈的一些用法:
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 }