看了下原码,原来是出栈操作实现有误,经改正,终于可以走出简单迷宫了。Happy~~ /* stack definition */ #include "stack.h" /* Parameter : NONE Return : NONE Description : stack class default constructor */ Stack::Stack() { cout<<"stack constructor"<<endl; base = new Node; top = base; iLength = 0; } // default constructor /* Parameter : ElemType Return : true or false Description : push an element to the stack */ bool Stack::Push(ElemType elem) { Node *temp; temp = new Node; temp->data = elem; temp->next = top; top->next = temp; top = temp; iLength++; return true; } // Push /* Parameter : ElemType & Return : true or false Description : Pop out an element from top of the stack */ bool Stack::Pop(ElemType &elem) { if (isEmpty()) return false; else { elem = top->data; top = top->next; iLength--; return true; } } // Pop /* Parameter : NONE Return : stack length Description : get stack current length */ int Stack::GetLength() { return iLength; } // GetLength /* Parameter : ElemType & Return : void Description : get stack top element store in the &elem */ bool Stack::GetTop(ElemType &elem) { if (isEmpty()) elem = top->data; return true; } // GetTop /* Parameter : NONE Return : true or false Description : if stack is empty then return true */ bool Stack::isEmpty() { if (top == base) return true; else return false; } // isEmpty /* Parameter : NONE Return : true or false Description : Visit stack elements from base to top in order */ bool Stack::Traverse() { Node *p = base->next; if (isEmpty() ) { cout<<"stack is empty now!"<<endl; return false; } while (p != top) { cout<<"Order : "<<p->data.iOrder<<endl; cout<<"Direction : "<<p->data.direction<<endl; cout<<"Position : ("<<p->data.seat.xPos<<","<<p->data.seat.yPos<<")"<<endl; p = p->next; } return true; } // Traverse /* Parameter : NONE Return : NONE Description : stack class default destructor */ Stack::~Stack() { cout<<"stack destructor"<<endl; } // default destructor