自己做网站多少钱,58同城租房个人房源出租,做网站需要准备什么东西,寝室网页设计图片大家好啊#xff0c;这里是c之旅第十一弹#xff0c;跟随我的步伐来开始这一篇的学习吧#xff01;
如果有知识性错误#xff0c;欢迎各位指正#xff01;#xff01;一起加油#xff01;#xff01;
创作不易#xff0c;希望大家多多支持哦#xff01; 一,数据结构…大家好啊这里是c之旅第十一弹跟随我的步伐来开始这一篇的学习吧
如果有知识性错误欢迎各位指正一起加油
创作不易希望大家多多支持哦 一,数据结构的概念
1.什么是数据结构
数据结构是指计算机存储和组织数据的方式
使用合理的数据结构能够提高程序的运行效率内存利用率等
2.数据结构的两个层次
1逻辑结构分为线性和非线性两种线性即为没有分支的一个接着一个非线性即为有分支或无逻辑上的连续关系
2存储结构
①线性分为连续存储数组和链式存储链表
②非线性索引存储和散列存储
二顺序表
1.属于线性表中的连续存储型
2.顺序表的特点
1、因为地址是连续的所以可以通过下标(索引)访问
2、顺序表可以是静态静态定好大小的数组也可以是动态用指针来开辟的空间
3、顺序表随机访问方便但是插入和删除中间的数据比较困难
3.顺序表的功能实现及完善eg数组的增删查改
类模板的使用可以避免每一次使用时需要写逻辑代码
头文件CMyArray.h内容如下
template class T//typename可以用来替换class
class CMyArray
{T *pBuff;size_t maxSize;size_t len;
public:CMyArray();CMyArray(CMyArray const other);~CMyArray();
public:void push_back(T const elem);//尾部添加void insert(int index, T const elem);//在index位置插入void pop_back();//尾部删除void erase(int index);//删除index位置的值T at(int index);//得到下标index的值int find(T const elem) const;//查找参数是否在数组中
public:bool empty() const;//判断当前数组是否是空size_t size() const;//得到当前数组元素个数size_t maxLen() const;//得到当前数组可以存放的最大元素个数
private:void _resetMemory();//扩容内存
};
template class T
void CMyArrayT::_resetMemory()
{if (len maxSize){maxSize (maxSize 1) 1 ? (maxSize 1) : 1;T *pTemp new T[maxSize];for (size_t i 0; i len; i)pTemp[i] pBuff[i];if (pBuff) delete[] pBuff;pBuff pTemp;}
}
template class T
size_t CMyArrayT::maxLen() const
{return maxSize;
}
template class T
size_t CMyArrayT::size() const
{return len;
}
template class T
bool CMyArrayT::empty() const
{return len 0;//return pBuff nullptr;//使用这个可能有指针指向的内存为未知而不是空的情况而此时数组实际为空了所以用上面那个方式更准确
}
template class T
int CMyArrayT::find(T const elem) const
{for (size_t i 0; i len; i){if (pBuff[i] elem)return i;}return -1;
}
template class T
T CMyArrayT::at(int index)
{if (index 0 || index (int)len)throw out_of_range;return pBuff[index];
}
template class T
void CMyArrayT::erase(int index)
{if (index 0 || index (int)len)throw out_of_range;for (size_t i index; i len; i)pBuff[i] pBuff[i 1];len--;
}
template class T
void CMyArrayT::pop_back()
{len--;
}
template class T
void CMyArrayT::insert(int index, T const elem)
{if (index 0 || index (int)maxSize)throw out_of_range;//if (len maxSize)//{// maxSize (maxSize 1) 1 ? (maxSize 1) : 1;// T *pTemp new T[maxSize];// for (size_t i 0; i len; i)// pTemp[i] pBuff[i];// if (pBuff) delete[] pBuff;// pBuff pTemp;//}//重复内容进行了封装 _resetMemory();
for (int i (int)len - 1; i index; --i)pBuff[i 1] pBuff[i];pBuff[index] elem;len;
}
template class T
void CMyArrayT::push_back(T const elem)
{//if (len maxSize)//{// maxSize (maxSize 1) 1 ? (maxSize 1) : 1;// T *pTemp new T[maxSize];// for (size_t i 0; i len; i)// pTemp[i] pBuff[i];// if (pBuff) delete[] pBuff;// pBuff pTemp;//}_resetMemory();pBuff[len] elem;
}
template class T
CMyArrayT::CMyArray(CMyArray const other)
{maxSize other.maxSize;len other.len;pBuff nullptr;if (other.pBuff){pBuff new T[maxSize];for (size_t i 0; i len; i)pBuff[i] other.pBuff[i];}
}
template class T
CMyArrayT::~CMyArray()
{if (pBuff)delete[] pBuff;pBuff nullptr;maxSize len 0;
}
template class T
CMyArrayT::CMyArray()
{pBuff nullptr;maxSize len 0;
}
.cpp文件内容如下 #include CMyArray.h
void main()
{CMyArrayint ma;for (int i 0; i 10; i)ma.push_back(i 1);ma.insert(1, 123);ma.pop_back();ma.erase(3);for (size_t i 0; i ma.size(); i)printf(%d\t,ma.at(i));printf(\n);
}