首页 > 代码库 > 栈、队
栈、队
本文为个人学习笔记。
昨天学习了表,写了个简单的单链表。今天看了下栈和队。
说白了:栈就是一个只能在头部插入和删除的表,遵循后进先出的原则;而队与栈的区别就是先进先出,从头部插入,底部删除。
附代码
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 }
栈、队
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。