C++習題練習(鏈式佇列)
阿新 • • 發佈:2018-12-22
函式宣告:
#include <iostream> #include <stdio.h> using namespace std; #define TRUE 1 #define FALSE 0 typedef int ElemType; class Node { private: public: ElemType _data; Node* _next; Node() { cout << "結點建構函式" <<endl; } ~Node() { cout << "結點解構函式" <<endl; } }; class Queue { private: Node* _head; Node* _tail; public: //建構函式 Queue() { cout << "佇列建構函式" <<endl; _head = new Node(); _tail = _head; } //拷貝建構函式 Queue(const Queue& queue) { cout << "拷貝建構函式" <<endl; _head = new Node(); _tail = _head; Node *s = queue._head; while( s != queue._tail) { _tail->_data = s->_data; s = s->_next; _tail->_next = new Node(); _tail = _tail->_next; } } //等號運算子過載函式 Queue& operator = (const Queue& queue) { cout << "等號運算子過載函式" <<endl; if(this == &queue) { return *this; } if(!IsEmpty_Queue()) { while(!IsEmpty_Queue()) { Node* next_head = _head->_next; delete _head; _head = next_head; } } _head = new Node(); _tail = _head; Node *s = queue._head; while( s != queue._tail) { _tail->_data = s->_data; s = s->_next; _tail->_next = new Node(); _tail = _tail->_next; } return *this; } //解構函式 ~Queue() { cout << "佇列解構函式" <<endl; while(_head != _tail) { Node* p = _head; _head = _head->_next; delete p; p = NULL; } _head = _tail = NULL; } //判斷佇列是否為空 int IsEmpty_Queue(); //進佇列 void Push_Queue(ElemType val); //出佇列 void Pop_Queue(); //獲取元素值 ElemType Get_data(); //得到佇列的長度 int Get_len(); //列印佇列資料 void Show_Queue(); };
函式實現:
#include "Queue.h" //判斷佇列是否為空 int Queue::IsEmpty_Queue() { if(_head == _tail) { return TRUE; } return FALSE; } //進佇列 void Queue::Push_Queue(ElemType val) { _tail->_data = val; _tail->_next = new Node(); _tail = _tail->_next; } //獲取元素值 ElemType Queue::Get_data() { return _head->_data; } //出佇列 void Queue::Pop_Queue() { Node* Next_Node = _head->_next; delete _head; _head = Next_Node; } //得到佇列的長度 int Queue::Get_len() { Node *p = _head; int count = 0; while(p != _tail) { count ++; p = p->_next; } return count; } //列印佇列資料 void Queue::Show_Queue() { if(IsEmpty_Queue()) { cout << "Queue is Empty!"<<endl; return ; } else { Node *p = _head; while(p != _tail) { cout << p->_data <<" "; p = p->_next; } cout << endl; return; } }
函式測試:
#include "Queue.h" int main() { Queue queue; //判空測試 if(queue.IsEmpty_Queue()) { cout << "queue is empty!" << endl; } else { cout << "queue is not empty!" << endl; } //入隊測試 for(int i = 0; i < 10; i++) { queue.Push_Queue(i); } if(queue.IsEmpty_Queue()) { cout << "queue is empty!" << endl; } else { cout << "queue is not empty!" << endl; } //列印測試 queue.Show_Queue(); //求長度測試 int len = queue.Get_len(); cout << "len = "<< len << endl; //出隊測試 cout << "data:"; for(int i = 0; i < 3; i++) { int tmp = queue.Get_data(); //刪除測試 queue.Pop_Queue(); cout << tmp << " " ; } cout << endl; queue.Show_Queue(); return 0; }