链式栈类模板实现(c++)

已经测试完成,无bug

LinkNode.h(主要用来做父类,节点的定义)

#include <iostream>
using namespace std;
# ifndef INCLUDE_LINKEDLIST_H_
# define INCLUDE_LINKEDLIST_H_
template  <class T>
struct LinkNode //链表节点类的定义 
{
    T data;       //数据域 
    LinkNode<T>*link;//链指针域
        LinKNode(LinkNode<T>*ptr=NULL) 
    {
        link=ptr;//仅初始化指针成员的构造函数 
    }
    LinkNode(const T&item,LinkNode<T>*ptr=NULL)
    {
        data=item;
        link=ptr;//初始化数据与指针成员的构造函数 
    }
 } ;
 template <class T>
 class List{//单链表类定义,不用继承也可以实现 
 
     public:
          List() {
         first = new LinkNode<T>(0,NULL); 
     }
     List(const T&x) 
     {
         first=new LinkNode<T>(x) ;    //带参数的构造函数 
     }
     List(List<T>&L) ;//复制构造函数                                         语法 
     ~List() {
     makeEmpty(); //析构函数 
     
     }
     void makeEmpty();
     int Length()const;  
     LinkNode<T>*getHead()const                                        //类内定义的方式 
     {
     return first;                                                   //  为什么要用常函数     
     } 
     void setHead(LinkNode<T>*p) //设置附加头结点地址 
     {
         first=p;
     }
     LinkNode<T>*Search(T x) ;//搜索含数据x的元素 
     LinkNode<T>*Locate(int i);//搜索第i个元素的地址 
     T*getData(int i); //取出第i个元素的数值 
     void setData(int i,T&x);//用x修改i位置的数值 
     bool Insert(int i,T&x) ;//在第i个元素后插入x元素 
     bool Remove(int i,T&x) ;//删除第i个元素,x返回该元素的值 
     bool IsEmpty()const{                                                   //这里用常函数到底是用来干嘛的 
     //判断链表是否为空
      return first->link==NULL ?true:false; 
     }
     bool IsFull()const
     {
         return false;//                                                        好家伙,直接返回错误了,还判断个鬼啊 
     }
     void Sort();//排序函数 
     void createlist(T end);
     void output() ;//输出
    List<T>&operator=( List<T>&L) ;//重载函数,赋值 
    protected:
     LinkNode<T> *first; 
 };
  
  template <class T>//复制构造函数 
  List<T>::List(List<T>&L) 
  {
      T value;
      LinkNode<T>*srcptr=L.getHead;//被复制表的附加头结点地址
      LinkNode<T>*desptr=first=new LinkNode<T>;  
      while(srcptr->link!=NULL)//逐个节点复制
      {
          value=srcptr->link->data;
          desptr->link=new LinkNode<T> (value);
          desptr=desptr->link;
          srcptr=srcptr->link;
                 } 
  };
  template <class T>
  void List<T>::makeEmpty()//将链表置为空 
  {
      LinkNode<T>*q;  //建 
      while(first->link!=NULL) 
      {
          //当链表不为空时,删除节点
          q=first->link;//指 
          first->link=q->link;//摘
          delete q; //删 
      }
  }; 
  
  
  template <class T>
  int List<T>::Length()const//计算带附加节点的链表长度 
  {
      LinkNode<T>*p=first->link;//从头节点开始 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值