顺序表的几种实现
2016-03-13 22:27
288 查看
#include<iostream> #include<stdlib.h> #include<stdio.h> using namespace std; typedef int DataType; #define DEFAULT_INC 9 #define DEFAULT_CAPACITY 7 class SeqList { public: friend ostream& operator<<(ostream& os, const SeqList& s); SeqList(int capacity = DEFAULT_CAPACITY) :_capacity(capacity) , _size(0) , _pdata(0) { _pdata = new DataType[capacity];; } SeqList(const SeqList& s) :_size(s._size) , _capacity(s._capacity) { _pdata = new DataType[_capacity]; memcpy(_pdata, s._pdata, _size*sizeof (DataType)); } void PushBack( const DataType& d) { _CheckCapacity(); _pdata[_size++] = d; } void PushFront( const DataType& d) { _CheckCapacity(); int start = _size - 1; while (start >= 0) { _pdata[start + 1] = _pdata[start]; start--; } _pdata[0] = d; _size++; } SeqList& operator=(const SeqList& s) { if (this != &s) { delete[] _pdata; _pdata = new DataType[s._capacity]; memcpy(_pdata, s._pdata, s._size*sizeof (DataType)); _size = s._size; _capacity = s._capacity; } return *this; } ~SeqList() { if (_pdata != NULL) { delete[]_pdata; } } public: void _CheckCapacity() { if (_size == _capacity) { DataType* tmp = new DataType[_capacity +DEFAULT_INC]; memcpy(tmp, _pdata, _size*sizeof(DataType)); delete[] _pdata; _pdata = tmp; _capacity = _capacity + DEFAULT_INC; } } private: DataType* _pdata; int _size;//当前有多少数据 int _capacity;//容量 }; ostream& operator<<(ostream& os, const SeqList& s) { int i = 0; for (i = 0; i < s._size; i++) { os << s._pdata[i] << " "; } os << endl; return os; } int main() { SeqList seqlist1; seqlist1.PushBack(1); seqlist1.PushBack(2); seqlist1.PushBack(3); seqlist1.PushBack(4); seqlist1.PushBack(5); seqlist1.PushBack(6); seqlist1.PushBack(7); seqlist1.PushBack(8); cout << seqlist1; SeqList seqlist2(seqlist1); cout << seqlist2; SeqList seqlist3; seqlist3 = seqlist2; cout << seqlist3; system("pause"); return 0; }
本文出自 “顺势而为” 博客,请务必保留此出处http://lk123456.blog.51cto.com/10831443/1750685
相关文章推荐
- 粗谈《Java与模式》一书
- Unity3D 5 官方教程:标准着色器:内容和环境;金属与镜面工作流
- 设计模式(三)
- OpenGL+VS2010+Win7配置简记
- JVM字节码指令集简介
- java day02 交换数据
- TortoiseSVN 图文使用教程
- 课程管理系统设计(windows系统)
- leetcode:Integer to Roman 【Java】
- iOS动画 过渡/转场动画的简单应用
- 2.下拉刷新、二维码
- 20145331 《Java程序设计》第2周学习总结
- HDU Least Common Multiple
- Mac下配置Nginx服务器
- 设计模式(二)
- C语言 每天做一道编程题
- javascript
- Spring分布式事务实现
- C#的ArrayList类
- 20159318 《网络攻防实践》第2周学习总结