首页 > 代码库 > 栈、队

栈、队

本文为个人学习笔记。

昨天学习了表,写了个简单的单链表。今天看了下栈和队。

  说白了:栈就是一个只能在头部插入和删除的表,遵循后进先出的原则;而队与栈的区别就是先进先出,从头部插入,底部删除。

附代码

 1 #include <iostream> 2 using namespace std; 3  4 typedef struct StackNode 5 { 6     int data; 7     StackNode* next; 8 }Node; 9 10 class Stack11 {    12 public:13     Stack(){bottom = top = NULL; }14     ~Stack(){};15 16     void Init();17     void push();18     void del();19 20     bool IsEmpty();21     void Print();22     void EmptyStack();23 24 private:25     Node* bottom;26     Node* top;27 };
  1 #include "stack.h"  2   3 int main()  4 {  5     Stack stack;  6   7     cout<<"初始化,以0结束\n";  8     stack.Init();  9     int i = 1; 10     while (i) 11     { 12         cout<<"1:进栈;2:出栈;3:输出;4:清空栈;0:退出"<<endl; 13         cin>>i; 14         switch (i) 15         { 16         case 1:stack.push();break; 17         case 2:stack.del();break; 18         case 3:stack.Print();break; 19         case 4:stack.EmptyStack();break; 20         case 0:return 0; 21         default:break; 22         } 23     } 24  25 } 26  27 //********************* 28 //初始化链表 29 //********************* 30 void Stack::Init() 31 { 32     top = bottom;//此处要new一个新的空间 33     cout<<"输入初始化元素,并以0结束 "<<endl; 34     int init_data = http://www.mamicode.com/0; 35      36     while(cin>>init_data) 37     { 38         if (init_data =http://www.mamicode.com/= 0) 39         { 40             break; 41         } 42         else if( !IsEmpty() ) 43         { 44             Node* temp = new Node;//要不要每次都new一次呢? 45             temp->data =http://www.mamicode.com/ init_data; 46             temp->next = NULL; 47             top->next = temp; 48             top = temp; 49             temp = NULL; 50             delete temp; 51         } 52         else 53         { 54             Node* temp = new Node; 55             temp->data =http://www.mamicode.com/ init_data; 56             temp->next = NULL; 57             top = bottom = temp; 58             temp = NULL; 59             delete temp; 60         } 61     } 62          63 } 64  65 //********************* 66 //********************* 67 bool Stack::IsEmpty() 68 { 69     return bottom == NULL; 70 } 71 //********************* 72 //进栈 73 //********************* 74 void Stack::push() 75 { 76     int push_data; 77     cout<<"请输入:"; 78     cin>>push_data; 79     Node* temp = new Node; 80      81     temp->data =http://www.mamicode.com/ push_data; 82     temp->next = NULL; 83     if (IsEmpty()) 84     { 85         top = bottom = temp; 86     } 87     else 88     { 89         top->next = temp; 90         top = top->next; 91     } 92      93     temp = NULL; 94     delete temp; 95 } 96  97 //********************* 98 //出栈 99 //*********************100 void Stack::del()101 {102     if(IsEmpty())103     {104         cout<<"栈为空栈,不能删除"<<endl;105         return;106     }107     else if (top == bottom)108     {109         Node* temp = bottom;110         top = bottom = NULL;111         delete temp;112     }113     else114     {115         Node* temp = bottom;116         while (temp->next != top)117         {118             temp = temp->next;119         }120         Node* end = top;121         top = temp;122         top->next = NULL;123         temp = NULL;124         delete temp;125         delete end;126     }127 }128 //*********************129 //输出链表130 //*********************131 void Stack::Print()132 {133     Node* m_temp = bottom;134     while(m_temp != NULL)135     {136         cout<<m_temp->data<<"\t";137         m_temp = m_temp->next;138     }139     cout<<endl;140     m_temp = NULL;141 }142 //*********************143 //清空链表144 //*********************145 void Stack::EmptyStack()146 {147     Node* m_temp = bottom;148     while(m_temp)149     {150         bottom = m_temp->next;151         delete m_temp;152         m_temp = bottom;153     }154     bottom = top = NULL;155     cout<<endl;156 }

队与栈的区别仅在于出栈方式不同

 1 //********************* 2 //出栈 3 //********************* 4 void Stack::del() 5 { 6     if(IsEmpty()) 7     { 8         cout<<"栈为空栈,不能删除"<<endl; 9         return;10     }11     else if (top == bottom)12     {13         Node* temp = bottom;14         top = bottom = NULL;15         delete temp;16     }17     else18     {19         Node* temp = bottom;20         bottom = bottom->next;21 22         delete temp;23     }24 }

 

栈、队