C++实现动态顺序表(类和对象)
2016-08-21 15:21
176 查看
在我之前写的博客里,写过用C语言实现顺序表的博客(你们可以去看看哟),最近重新复习了C++,决定用C++重新实现一遍顺序表咦巩固我的基础。这里我用的是类来实现顺序表,下面是我代码的实现,简单易懂:
"test.cpp"
"SeqList.h"
"test.cpp"
<strong><span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; #include "SeqList.h" void Test1() { SeqList seq; for (int i = 0;i < 5;i++) { seq.PushBack(i); } cout<<seq<<endl; cout<<seq.Capacity()<<endl; seq.PushFront(5); seq.PushFront(6); cout<<seq<<endl; cout<<seq.Capacity()<<endl; seq.PopBack(); seq.PopBack(); seq.PopBack(); cout<<seq<<endl; seq.PopFront(); seq.PopFront(); cout<<seq<<endl; } void Test2() { SeqList seq; for (int i = 0;i < 5;i++) { seq.PushBack(i); } cout<<seq<<endl; cout<<seq.Find(5)<<endl; seq.Insert(seq.Find(2),10); cout<<seq<<endl; seq.Remove(seq.Find(3)); cout<<seq<<endl; cout<<seq.Size()<<endl; seq.Remove(seq.Find(10)); cout<<seq<<endl; cout<<seq.Size()<<endl; } void Test3() { SeqList seq; for (int i = 0;i < 5;i++) { seq.PushBack(i); } cout<<seq<<endl; seq.Insert(seq.Find(2),10); seq.Insert(seq.Find(0),10); seq.Insert(seq.Find(4),10); cout<<seq<<endl; seq.RemoveAll(seq.FindData(10)); cout<<seq<<endl; SeqList seq2; for (int i = 6;i >0;i--) { seq2.PushBack(i); } seq2.Sort(seq2); cout<<seq2<<endl; } int main() { //Test1(); //Test2(); Test3(); system("pause"); return 0; }</span></strong>
"SeqList.h"
<strong><span style="font-size:18px;">#pragma once #include <assert.h> typedef int DataType; class SeqList { friend ostream& operator<<(ostream& os,SeqList seq); public: SeqList() :_size(0) ,_capacity(0) ,_data(NULL) {} ~SeqList() { if (_data) { delete[] _data; _data = NULL; } _size = 0; _capacity = 0; } //拷贝构造 SeqList(const SeqList& seq) { _data = new DataType[seq._capacity]; //内存拷贝 memcpy(_data,seq._data,sizeof(DataType)*seq._size); _size = seq._size; _capacity = seq._capacity; } public: bool Empty() { return _size==0; } size_t Size() { return _size; } size_t Capacity() { return _capacity; } void PushBack(const DataType& data) { CheckCapacity(); _data[_size++] = data; } void PushFront(const DataType& data) { CheckCapacity(); for (int i = _size;i > 0;i--) { _data[i] = _data[i-1]; } _data[0] = data; _size++; } void PopBack() { if (Empty()) { return; } else { _size--; } } void PopFront() { for (int i = 1;i < _size;i++) { _data[i-1] = _data[i]; } _size--; } int Find(const DataType& data) { for (int i = 0;i < _size;i++) { if (_data[i] == data) { //如果找到了,返回当前位置的下标 return i; } } return -1; } DataType FindData(const DataType& data) { for (int i = 0;i < _size;i++) { if (_data[i] == data) { //如果找到了,返回当前位置的下标 return _data[i]; } } return NULL; } //找到某一个位置,在这个位置后面插入数据 void Insert(int pos,const DataType& data) { assert(pos != -1); CheckCapacity(); for (int i = _size;i > pos;i--) { _data[i] = _data[i-1]; } _data[pos+1] = data; _size++; } //找到要删除的位置,删除该位置上的数据 void Remove(int pos) { if (_size != 0) { assert(pos != -1); for (int i = pos;i < _size-1;i++) { _data[i] = _data[i+1]; } _size--; } } void RemoveAll(const DataType& data) { if (_size != 0) { int i = 0; while (i < _size) { if (_data[i] == data) { for (int j = i;j < _size-1;j++) { _data[j] = _data[j+1]; } _size--; } else { i++; } } } } void Sort(SeqList seq) { int i = 0; int j = 0; for (i = 0;i < _size-1;i++) { for (j = i;j < _size-1-i;j++) { if (seq._data[j] > seq._data[j+1]) { swap(seq._data[j],seq._data[j+1]); } } } } private: void CheckCapacity() { if (_size >= _capacity) { int newcapacity = 2*_capacity+5; DataType* tmp = new DataType[newcapacity]; memcpy(tmp,_data,sizeof(DataType)*_size); delete[] _data; _data = tmp; _capacity = newcapacity; } } private: int _size; int _capacity; DataType* _data; }; //重载输出运算符 ostream& operator<<(ostream& os,SeqList seq) { for (int i = 0;i < seq._size;i++) { os<<seq._data[i]<<" "; } return os; }</span></strong>
相关文章推荐
- UNIX下C++实现动态载入对象
- 从零开始学C++之模板(四):用模板实现单例模式(线程安全)、模板方式实现动态创建对象
- c++ 实现动态顺序表(拷贝构造 赋值运算符重载等操作)
- c++ 实现动态顺序表(拷贝构造 赋值运算符重载等操作)
- C++:对象数组、对象动态申请和释放、类的定义和实现分开、this指针、常成员函数、时钟
- C++对象动态生成(Dynamic Create)的简单实现
- C++如何实现类对象只能动态分配或只能静态分配
- C++对象布局及多态实现之动态和强制转换
- C++如何实现只能动态分配类对象,不能定义类对象
- C++实现只能动态或者静态创建对象
- 数据结构与算法之—顺序栈c++面向对象实现
- C++ 类工厂实现动态对象创建
- C++实现动态分配const对象实例
- C++实现反射(根据类名动态创建对象)
- c++动态加载dll中的类(用于实现依据字符串类名创建对象)
- c++动态加载dll中的类(用于实现依据字符串类名创建对象)
- 从零开始学C++之模板(四):用模板实现单例模式(线程安全)、模板方式实现动态创建对象
- c++ 模板类实现 动态顺序表 基础操作
- C++实现动态顺序表
- C++对象动态生成(Dynamic Create)的简单实现