c++实现静态单链表的实例

  

<强> c++实现静态单链表的实例

  

利用数组实现的静态单链表,与严蔚敏书实现略有不同,不另设回收空间。有任何错误或错误,希望各位朋友多多反馈~ ~感激不尽

     /*作者:Moyiii   *电子邮件:lc09@vip.qq.com   *静态链表实现,仅作学习之用,当然如果   *你想拿去用,随你好啦。   */# include & lt; iostream>      使用名称空间性病;      #定义MAX_LIST_SIZE 100      类节点   {   公众:   int数据;   int坏蛋;   };         类SLinkList   {   公众:   SLinkList ();//和普通的线性链表区别不是很大。除了两个分配//和回收节点空间的函数,具体算法请参考课本或//网络资料   int newNode ();   bool deleteNode (int pos);   pos bool insertElem (int, int elem);   bool deleteElem (int pos);   int&getElem (int pos);   int getLength ();   bool isEmpty ();   空白打印();   空白clear ();      私人:   int头;//这个可以不要,默认等于0   int空间;   int长度;   节点* elem;   };         SLinkList: SLinkList ()   {//0号位置为头几点,不可以更改,初始指向自己//从1 ~最大长度为可分配节点,最初由空间管理      elem=新节点(MAX_LIST_SIZE);   如果(! elem)   {   cout & lt; & lt;“Malloc失败!”& lt; & lt;endl;   }      头部长度=空间==0;      for (int i=0;我& lt;MAX_LIST_SIZE;+ + i)   {   elem[我]。数据=https://www.yisu.com/zixun/i;   elem[我]。坏蛋=i + 1;   }   elem [MAX_LIST_SIZE - 1]。坏蛋=0;   elem [0]。坏蛋=0;   空间=1;   }//从空间指向的备用节点链表中取下一个节点   int SLinkList: newNode ()   {   如果(空间==0)   {   cout <翱占湟崖?”& lt; & lt;endl;   返回0;   }      int pos=空间;   空间=elem .cur(空间);   elem (pos)。坏蛋=0;   返回pos;   }//回收节点空间   bool SLinkList:: deleteNode (int pos)   {   如果(pos==0)   {   cout & lt; & lt;“自由空间”错误!& lt; & lt;endl;   返回错误;   }   elem (pos)。坏蛋=空间;   空间=pos;   返回true;   }//插入节点,思路类似,找到被删除节点的前一个节点//然后更改指向   pos bool SLinkList:: insertElem (int, int elem)   {   如果(长度==MAX_LIST_SIZE)   {   cout & lt; & lt;“空间已满”& lt; & lt;endl;   返回错误;   }      如果(pos & lt;1 | | pos祝辞长度+ 1)   {   cout & lt; & lt;“插入/绑定”& lt; & lt;endl;   返回错误;   }      int指数=头;   for (int i=1;我& lt;=pos - 1;+ + i)   {   (指数)指数=elem .cur;   }      int节点=newNode ();   如果(节点==0)   {   cout & lt; & lt;“太空malloc失败”& lt; & lt;endl;   返回错误;   }   elem(节点)。数据=https://www.yisu.com/zixun/elem;   elem(节点)。坏蛋=elem .cur(指数);   elem(指数)。坏蛋=节点;      长度+ +;   返回true;   }//一回事,注意把删除的节点回收给空间   bool SLinkList:: deleteElem (int pos)   {   如果(pos <1 | | pos>长度)   {   cout <吧境诘惆蠖?”& lt; & lt;endl;   返回错误;   }      int指数=头;      for (int i=1;我& lt;=pos - 1;+ + i)   {   (指数)指数=elem .cur;   }      int节点=elem .cur(指数);   elem(指数)。坏蛋=elem .cur(节点);      deleteNode(节点);      长度,;      返回true;   }      空白SLinkList: print ()   {   int指数=elem .cur(头);   而(指数!=0)   {   cout & lt; & lt;elem(指数)。数据& lt; & lt;“”;   (指数)指数=elem .cur;   }   cout & lt; & lt;endl;   返回;   }      int SLinkList: getLength ()   {   返回长度;   }      bool SLinkList: isEmpty ()   {   如果(长度==0)   {   返回true;   }   其他的   {   返回错误;   }   }      int&SLinkList:: getElem (int pos)   {   int指数=头;   for (int i=1;我& lt;=pos;+ + i)   {   (指数)指数=elem .cur;   }   返回elem(指数). data;   }      空白SLinkList: clear ()   {   for (int i=0;我& lt;MAX_LIST_SIZE;+ + i)   {   elem[我]。数据=https://www.yisu.com/zixun/i;   elem[我]。坏蛋=i + 1;   }   elem [MAX_LIST_SIZE - 1]。坏蛋=0;   elem [0]。坏蛋=0;   空间=1;   }      int main ()   {//测试数据,测试插入删除空间是否溢出   SLinkList myList;      for (int i=1;

c++实现静态单链表的实例