1. 程式人生 > >C++中利用鏈表實現一個棧

C++中利用鏈表實現一個棧

pop sin 返回 void tac () node bool typedef

在實現棧之前應該思考棧的一些用法:

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 }

C++中利用鏈表實現一個棧