SeqList Dear 丶 2022-09-26 13:57 117阅读 0赞 #pragma once #include <assert.h> #include <iostream> using namespace std; typedef int DataType; class SeqList { public: SeqList() :_array(NULL) , _size(0) , _capacity(0) {} SeqList(DataType* array, size_t size) { _array = new DataType[size]; memcpy(_array, array, sizeof(DataType)*size); _size = size; _capacity = size; } SeqList(const SeqList& s) :_array(NULL) , _size(0) , _capacity(0) { SeqList tmp(s._array, s._size); tmp.Swap(*this); } SeqList& operator=(SeqList s) { s.Swap(*this); return *this; } void Swap(SeqList& s) { std::swap(_array,s._array); std::swap(_size,s._size); std::swap(_capacity, s._capacity); } ~SeqList() { if (_array) { delete[] _array; _array = NULL; _size = 0; _capacity = 0; } } void Print() { for (int i = 0; i <(int) _size; ++i) { cout << _array[i] << " "; } cout << endl; } void PushBack(const DataType& x) { _CheckCapacity(_size + 1); _array[_size++] = x; } void PopBack() { if (_size == 0) { return; } _size--; } void PushFront(const DataType& x) { _CheckCapacity(_size + 1); for (int i = (int)_size - 1; i >= 0; i--) { _array[i + 1]=_array[i]; } _array[0] = x; _size++; } void PopFront() { if (_size == 0) { return; } for (int i =1; i <(int)_size; i++) { _array[i - 1] = _array[i]; } _size--; } void Insert(DataType index, DataType x) { _CheckCapacity(_size + 1); for (int i = (int)_size - 1; i >= index; i--) { _array[i + 1] = _array[i]; } _array[index] = x; _size++; } //修改某个位置的值 void Modified(DataType index, DataType x) { if (index > _size-1) { return; } _array[index] = x; } //删除某个位置的值 void Removed(DataType index) { int i=0; if (index > _size-1) { return; } for (i =index + 1; i < _size; i++) { _array[i - 1] = _array[i]; } --_size; } DataType Find(DataType x,DataType index) { for (int i = index; i < _size; i++) { if (_array[i] == x) { return i; } } return -1; } //删除x,flag=1,删除所有x void Erase(DataType x, int flag) { int index = Find(x, 0); while (index != -1) { Removed(index); if (flag == 1) { index = Find(x, index); } else { return; } } } //冒泡排序 void Sort() { int i = 0, j = 0; int exchange = 0; for (i = (int)_size - 1; i > 0; i--) { for (j = 0; j < i; j++) { if (_array[j]>_array[j + 1]) { int tmp = _array[j]; _array[j] = _array[j + 1]; _array[j + 1] = tmp; exchange = 1; } } if (exchange == 0) { break; } } } int BinarySearch(DataType x) { int left = 0; int right = _size - 1; while (left <= right) { int mid = (right - left) / 2 + left; if (_array[mid] == x) { return mid; } if (_array[mid] > x) { left = mid+1; } if (_array[mid] < x) { right = mid-1; } } return -1; } size_t Size() { return _size; } size_t Capacity() { return _capacity; } private: void _CheckCapacity(size_t size) { if (size > _capacity) { _capacity = size > 2 * _capacity ? size : 2 * _capacity; DataType* tmp = new DataType[_capacity]; memcpy(tmp, _array, sizeof(DataType)*_size); delete[] _array; _array = tmp; } } private: DataType* _array; size_t _size; size_t _capacity; };
相关 【C数据结构】动态顺序表_SeqList 目录 一、动态顺序表\_SeqList(C) 【1.1】动态顺序表定义数据结构和接口 【1.2】动态顺序表创建初始化 【1.3】动态顺序表初始化 【1.4】动态顺序表 怼烎@/ 2024年03月16日 19:49/ 0 赞/ 42 阅读
相关 【C数据结构】静态顺序表_SeqList 目录 一、静态顺序表\_SeqList(C) 【1.1】静态顺序表定义数据结构和接口 【1.2】静态顺序表初始化 【1.3】静态顺序表头插入 【1.4】静态顺序表尾插 淩亂°似流年/ 2024年03月16日 19:15/ 0 赞/ 48 阅读
相关 SeqList pragma once include <assert.h> include <iostream> using namespace std; Dear 丶/ 2022年09月26日 13:57/ 0 赞/ 118 阅读
相关 来吧java,创建一个SeqList类 package DataStructureTest; public class SeqList<T> implements LList<T> { 女爷i/ 2022年08月14日 03:44/ 0 赞/ 183 阅读
还没有评论,来说两句吧...