本文主要给大家介绍了关于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++简单实现顺序表和单链表的示例代码