用C++实现一个链式栈的实例代码

自定义一个链式栈,c++语言实现,不足之处,还望指正!

复制代码 代码如下:

// MyStack.cpp : 定义控制台应用程序的入口点。


//自己构造一个链式栈,具有push(入栈),pop(出栈),top(取得栈顶元素),size(返回栈大小),empty(判断是否为空)等功能

#include "stdafx.h"

#include

using namespace std;

//构造栈的节点

template

struct NODE

{

 NODE* next;

 T data;

};

template

class MyStack

{

public:

 MyStack()

 {

  phead = new NODE;

  if (phead == NULL)

  {

   cout << "Failed to malloc a new node. " << endl;

  }

  else

  {

   phead->data = NULL;

   phead->next = NULL;

  }

 }


 //入栈

 void push(T e)

 {

  NODE* p = new NODE;

  if (p == NULL)

  {

   cout << "Failed to malloc a new node. " << endl;

  }

  else

  {

   p->data = e;

   p->next = phead->next;

   phead->next = p;

  }

 }


 //出栈

 T pop()

 {

  T e;

  NODE* p = phead->next;

  if(p != NULL)

  {

   phead->next = p->next;

   e = p->data;

   delete p;

   return e;

  }

  else

  {

   cout << "There is no elements in the stack." << endl;

   return NULL;

  }

 }


 //取得栈顶元素

 T top()

 {

  T e;

  NODE* p = phead->next;

  if (p != NULL)

  {

   e = p->data;

   return e;

  }

  else

  {

   cout << "There is no elements in the stack." << endl;

   return NULL;

  }

 }

 //取得栈中元素个数

 int size()

 {

  int count(0);

  NODE* p = phead->next;

  while (p != NULL)

  {

   p = p->next;

   count++;

  }

  return count;

 }

 //判断stack是否为空

 bool empty()

 {

  NODE* p = phead;

  if (p->next == NULL)

  {

   return true;

  }

  else

  {

   return false;

  }

 }

private:

 NODE* phead;

};

int _tmain(int argc, _TCHAR* argv[])

{

 MyStack sta;

 sta.push(1);

 sta.push(2);

 sta.push(3);

 cout << "The size of the stack now is " << sta.size() << endl;

 sta.pop();

 cout << "The top element is " << sta.top() << endl;

 cout << "The size of the stack now is" << sta.size() << endl;

 if (sta.empty())

 {

  cout << "This stack is empty." << endl;

 }

 else

 {

  cout << "This stack is not empty." << endl;

 }

 return 0;

}


0.227658s