C++中利用鏈表實現一個棧
阿新 • • 發佈:2017-05-28
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++中利用鏈表實現一個棧