利用c++简单实现顺序表和单链表的示例代码

  

本文主要给大家介绍了关于c++实现顺序表和单链表的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍:

  

        # include & lt; assert.h>   # include & lt; iostream>   使用名称空间性病;      typedef int数据类型;      类SeqList   {   公众:   SeqList ()   :_array(空)   _size (0)   _capacity (0)   {   }      SeqList (const SeqList&s)   {   _array=(数据类型*)malloc (s._size * (sizeof(数据类型)));   memcpy (_array, s。_array, s._size * (sizeof(数据类型)));   _size=_capacity=s._size;   }      SeqList&运算符=(SeqList&s)   {   免费(_array);   交换(年代);   返回*;   }      无效的交换(SeqList&s)   {   _array=s._array;   _size=s._size;   _capacity=s._capacity;   }      ~ SeqList ()   {   如果(_array)   {   免费(_array);   _array=零;   _size=_capacity=0;   }   }      无效的Print ()   {   (size_t我=0;我& lt;_size;我+ +)   {   cout & lt; & lt;_array[我]& lt; & lt;“”;   }   cout & lt; & lt;endl;   }      空白CheckCapcacity ()   {   如果(_size==_capacity)   {   _capacity=2 * _capacity + 3;   _array=(数据类型*)realloc (_array _capacity * sizeof(数据类型));   断言(_array);   }   }//后插   无效的阻力(数据类型x)   {   插入(_size x);   }//前插   空白PushFront(数据类型x)   {   插入(0,x);   }//删除最后一个   空白PopBack ()   {   擦除(_size);   }//删除第一个   空白PopFront ()   {   删除(0);   }//[]运算符重载   Datatype&运营商[](size_t pos)   {   断言(pos & lt;_size);   返回_array (pos);   }//pos位置前插入x   插入空白(size_t pos数据类型x)   {   断言(pos & lt;=_size);   CheckCapcacity ();   int结束=(int) _size - 1;   如果(pos==0)   {   而(在=0)   {   _array(终端+ 1)=_array[结束];   结束,   }   _array [0]=x;   }   其他的   {   而(祝辞=(int) pos)   {   _array(终端+ 1)=_array[结束];   结束,   }   _array (pos)=x;   }   _size + +;   }//删除pos位置的元素   空白消除(size_t pos)   {   断言(pos & lt;_size);//popfront的实现   如果(_size比;0)   {   如果(pos==0)   {   int结束=0;   而(& lt;(int) _size - 1)   {   _array[结束]=_array(终端+ 1);   + +;   }   _size——;   }//popback的实现   else if (pos==_size)   {   _size——;   }//擦除   其他的   {   int结束=pos;   而(& lt;(int) _size - 1)   {   _array[结束]=_array(终端+ 1);   + +;   }   _size——;   }   }   返回;   }      私人:   数据类型* _array;   size_t _size;   size_t _capacity;   };      

        # include & lt; iostream>   # include & lt; assert.h>   使用名称空间性病;      typedef int数据类型;      struct SListNode   {   SListNode * _next;   数据类型_data;      SListNode(数据类型x)   :_data (x)   _next(空)   {}   };      typedef SListNode节点;      类SList   {   公众:   SList ()   :_head(空)   _tail(空)   {}      SList (const SList&s)   :_head(空)   _tail(空)   {   (s)复印件;   }      SList&运算符=(const SList&s)   {   Destroy ();   (s)复印件;   返回*;   }      ~ SList ()   {   Destroy ();   }         空白拷贝(const SList&s)   {   节点* cur=s._head;   而(坏蛋)   {   推迟(cur→_data);   坏蛋=cur→_next;   }   }      空白摧毁()   {   节点* cur=_head;   而(_head !=NULL)   {   坏蛋=_head;   _head=cur→_next;   删除坏蛋;   }   _head=_tail=零;   }      无效的阻力(数据类型x)   {   如果((_head==NULL),和(_tail==NULL))   {   _head=_tail=新节点(x);   }   其他的   {   _tail→_next=新节点(x);   _tail=_tail→_next;   }   }      空白PopBack ()   {   如果(_head==NULL)   {   返回;   }   else if (_head→_next==NULL)   {   删除_head;   _head=_tail=零;   }   其他的   {   节点* tmp=_head;   而(tmp→_next→_next !=NULL)   {   tmp=tmp→_next;   }   _tail=tmp;   tmp→_next=零;   }   }      空白PushFront(数据类型x)   {   如果((_head==NULL),,(_tail==NULL))   {   _head=_tail=新节点(x);   }   其他的   {   节点* tmp=新节点(x);   tmp→_next=_head;   _head=tmp;   }   }      空白PopFront ()   {   如果(_head==NULL)   {   返回;   }   节点* cur=_head;   _head=_head→_next;   删除坏蛋;   }      节点*找到(数据类型x)   {   节点* tmp=_head;   而(tmp)   {   如果(tmp→_data=https://www.yisu.com/zixun/=x)   返回tmp;   tmp=tmp -> _next;   }   返回NULL;   }//插入一个节点在pos的前面   插入空白(节点* pos数据类型x)   {   断言(pos);   如果(pos==0)   {   PushFront (x);   }   其他的   {   节点* cur=_head;   而(cur -> _next !=pos)   {   坏蛋=cur -> _next;   }   节点* tmp=新节点(x);   tmp -> _next=pos;   坏蛋-> _next=tmp;   }   }      空白消除(节点* pos)   {   断言(pos);   如果(pos==0)   {   PopFront ();   }   else if (pos -> _next==NULL)   {   PopBack ();   }   其他的   {   节点* cur=_head;   而(cur -> _next !=pos)   {   坏蛋=cur -> _next;   }   节点* tmp=cur -> _next;   坏蛋-> _next=tmp -> _next;   删除tmp;   }   }      无效的Print ()   {   节点* tmp=_head;   而(tmp !=NULL)   {   cout

利用c++简单实现顺序表和单链表的示例代码