之前对顺序栈写了基本操作,认为有必要也动手练练栈的链表实现。
  对于链栈,一般不会出现栈满的情况。
  链栈头文件定义例如以下:
#ifndef CSTOCK_H_
#define CSTOCK_H_
typedef int elemType;
struct Item
{
elemType data;
Item * p_next;
};
class CStock
{
public:
CStock();
CStock(const CStock & otherStock); //拷贝构造函数
CStock & operator = (const CStock & otherStock); //=运算符重载。
void push(elemType x);//进栈操作;
bool pop(elemType &x); //出栈操作;
bool isEmpty() const; //推断栈空;
void clear();//清空栈。使栈为空;
int size() const; //获得栈的大小。
void print() const; //打印栈内元素;
~CStock();
public:
Item *p_Top;//栈顶
};
#endif
  实现的基本功能例如以下:
#include "CStock.h"
#include <iostream>
using std::cout;
using std::endl;
CStock::CStock(): p_Top(NULL)//构造函数
{
}
//拷贝构造函数 便于定义时初始化,如 CStock s1 = stock; 默认的会出现潜在问题
CStock::CStock(const CStock & otherStock):p_Top(NULL)
{
*this = otherStock;
}
// =运算符重载,便于赋值,如:CStock s1; .... CStock s2; s2 = s1;  默认的会出现潜在问题。