Description
請實現以下棧類的定義:
enum ErrorCode
{
success,
underflow,
overflow
};
template
struct Node
{
StackEntry data;
Node *next;
};
template
class MyStack
{
public:
MyStack();
/*
判斷棧是否為空,若為空則返回true,非空則返回false
*/
bool empty() const;
int size() const;
/*
出棧操作,若正常出棧則返回success,若棧內無元素則返回underflow
*/
ErrorCode pop();
/*
獲取棧頂元素,若正常獲取到棧頂元素則返回success,若棧內無元素則返回underflow
元素內容保存在引用參數item中
*/
ErrorCode top(StackEntry &item) const;
/*
入棧操作,若正常入棧則返回success,若入棧失敗則返回overflow
*/
ErrorCode push(const StackEntry &item);
/*
清空棧
*/
void clear();
private:
Node<StackEntry> *pTop;
};
注意,只需要提交類的聲明以及函數實現,不需要提交main函數。
Hint
注意,只需要提交類的聲明以及函數實現,不需要提交main函數。
enum ErrorCode
{
success,
underflow,
overflow
};
template < typename StackEntry>
struct Node
{
StackEntry data;
Node *next;
};
template < typename StackEntry>
class MyStack
{
public:
MyStack() : pTop(NULL){}
/*
判斷棧是否為空,若為空則返回true,非空則返回false
*/
bool empty() const {return pTop == NULL;}
int size() const
{
int size = 0;
Node<StackEntry> * p = pTop;
while(p)
{
++size;
p = p->next;
}
return size;
}
/*
出棧操作,若正常出棧則返回success,若棧內無元素則返回underflow
*/
ErrorCode pop()
{
if(empty())
{
return underflow;
}
Node<StackEntry> * p = pTop;
pTop = pTop->next;
delete p;
return success;
}
/*
獲取棧頂元素,若正常獲取到棧頂元素則返回success,若棧內無元素則返回underflow
元素內容保存在引用參數item中
*/
ErrorCode top(StackEntry &item) const
{
if(empty())
{
return underflow;
}
item = pTop->data;
return success;
}
/*
入棧操作,若正常入棧則返回success,若入棧失敗則返回overflow
*/
ErrorCode push(const StackEntry &item)
{
Node<StackEntry> * p = new Node<StackEntry>();
if(!p)
{
return overflow;
}
p->data = item;
p->next = pTop;
pTop = p;
return success;
}
/*
清空棧
*/
void clear()
{
Node<StackEntry> * p = pTop;
while(p)
{
Node<StackEntry> * q = p;
p = p->next;
delete q;
}
pTop = NULL;
}
private:
Node<StackEntry> *pTop;
};