參加“去哪兒”面試的一道題,面試官很嚴格,很注意細節,而我昨天從進門開始就犯迷糊,代碼也寫得一塌糊塗,回來后查了資料看了幾遍,自己又寫了幾遍。這次面試得到的教訓是:自己會的東西一定要懂得徹底,不能被問倒,尤其是基礎的問題,更不能出現這種大概知道,細節實現不好的問題。
LinkQueue.h
#include<iostream> using namespace std; template <typename T> struct Node{ Node(T &d){ data=d; next=NULL; } T data; Node *next; }; template <typename T> class LinkQueue{ private: int length; Node<T> *front; Node<T> *rear; public: LinkQueue(T &n){ Node <T> *p=new Node<T>(n); length=0; front=rear=p; } bool Queuelength() { cout<<"當前隊列長度:"<<length<<endl; return true; } bool IsEmpty(){ return length==0; } void EnQueue(T n) { Node<T> *p=new Node<T>(n); rear->next=p; rear=p; length++; } bool DelQueue(){ if(front==rear) return false; Node<T> *p=front->next; front->next=p->next; if(front->next==NULL) rear=front; delete p; length--; return true; } void Tranverse() { Node<T> *p=front->next; cout<<"遍歷隊列:"<<endl; while(p!=NULL) { cout<<p->data<<" "; p=p->next; } cout<<endl; } };
LinkQueue.cpp
#include "LinkQueue.h" int main(){ int head=0; LinkQueue<int> *lq=new LinkQueue<int>(head); lq->EnQueue(2); lq->EnQueue(4); lq->EnQueue(6); cout<<"當前隊列"<<endl; lq->Tranverse(); if(lq->DelQueue()){ cout<<"出隊成功"<<endl; } lq-> Queuelength(); lq->Tranverse(); lq->EnQueue(16); lq->EnQueue(18); lq->EnQueue(19); if(lq->DelQueue()){ cout<<"出隊成功"<<endl; } lq-> Queuelength(); lq->Tranverse(); if(lq->DelQueue()){ cout<<"出隊成功"<<endl; } lq-> Queuelength(); lq->Tranverse(); return 0; }