培训部分
数据结构的概念:
逻辑结构
物理结构
运算结构
几个常用的数据结构:
堆栈(栈)
队列
链表
二叉树(有序)
数据结构的分类:
抽象层——逻辑结构(人脑中)
结构层——物理结构(计算机)
实现层——运算结构(应用角度)
逻辑结构的分类:
集合结构(集) - 结构中的元素除了 同属于一个集合之外没有 其他的关系。
线性结构(表) - 结构中的元素 是一对一的前后关系。(重点)
树型结构(树) - 结构中的元素 是一对多的父子关系。
网状结构 - 结构中的元素 是多对多的交叉映射关系。
物理结构的分类:
顺序结构 - 数据存放在一片连续的内存地址中(不间断)。
链式结构 - 链式结构的元素存放在不连续的内存地址中,因此存储时按节点存储,而不只是存储数据。一个节点包括数据和下一个节点的地址。
优缺点:
顺序结构:随机访问方便,插入删除效率低,空间使用率低。
链式结构:插入删除方便,随机访问效率低,空间使用率高。
顺序结构 链式结构 互补。
数组是一个常指针,不能改变指向的指针
完全二叉树 就是 前面n-1 是满的,最后一层可以不满,但是要 从左向右 连续排列。
快速排序
void quick_sort(int *a,size_t begin,size_t end){
size_t m=(begin+end)/2;
int p=a[m];
size_t i=begin,j=end;
while(i<j)
{
for(;!(i>=m || p<a[i]);++i);
if(i<m)
{
a[m]=a[i];
m=i;
}
for(;!( j<=m || p>a[j]);--j);
if(j>m)
{
a[m]=a[j];
m=j;
}
}
a[m]=p;
if(i-begin>1)
{
quick_sort(a,begin,m-1);
}
if(end-j>1)
{
quick_sort(a,j+1,end);
}
}
自学部分
String 和Array都是一种容器
容器运用时机
vector
内部结构最简单,允许随机存取
deque
经常在序列头部和尾部安插和移动元素
list
经常在容器中执行元素的安插,移动和移除
set,multiset
经常需要根据某个准则来搜寻元素
容器内的型别
container::value_type
都支持
container::key_type
关联式容器支持,set,map
container::key_compare
关联式容器支持
container::value_compare
关联式容器支持
explicit container::container(const CompFunc& op)
以op为准则产生一个容器
关联式容器支持
explicit container::container(const container& c)
都支持
explicit container::container(const container& c)
vector,deque,list支持
container::container (size_type num,const T& value)
vector,deque,list,string支持
string不是引用传值
container::container(InputIterator beg,InputIterator end)
都支持
container::container(InputIterator beg,InputIterator end,const CompFunc& op)
关联式容器支持
bool container::empty比 size()==0快
size_type container::capacity() const
返回重新分配前最多元素个数
vector,strin支持
void container::reserve(size_type num)
vector,string支持
count,find,lower_bound,upper_bound,equal_range,key_comp,value_compare
void container::assign(size_type num,const T& value)
关联式容器支持
void container::assign(InputIterator begin,InputIterator end)
vector,deque,list ,string支持
at
vector,deque,string支持
operator[]
vector,deque,string支持
T& map::operator[](const key_type& key)
map支持
front(),back()
vector,deque,list支持
如果容器为空 rend()==rbegin()
iterator container::insert(const T& value)
pair<iterator,bool> container::insert(const T& value)
关联式容器+string支持
序列式操作一般返回void版本
关联式操作一般返回 iterator版本
void list::remove 只有list支持
void container::resize(size_type num,T value)
vector,deque,list,string支持
配置器
...
迭代器
*iter=42 等同于 iter=42
advance(InputIterator &pos,Dist n)
pos前进n