目录
常用语法
- for语句,范围for
除了一般的循环,还有遍历功能,如
for(声明:序列),然后就会遍历了。
stl模板库
-
vector
定义
vector<typename> v;
vector<typename> v(n); 定义一个vector,包含n个元素,都默认初始化。
vector<typename> v(n,1);定义一个长度为n的向量,里面的元素初始值为1。
vector<typename> v1(v.begin(),v.end());定义了一个v1,里面的内容为v,其实也可以复制一部分。括号里面必须是地址或者 迭代器。
使用
v.resize(n),把vector设置为长度为n,并且初始化。
常见算法
-
树
1.前序和中序遍历建树
void creat(node* &root,int prel,int prer,int inl,int inr)
{
if(prel>prer) return;
int u = pre[prel];
root = newnode(u);
int k;
for(int i=inl;i<=inr;i++)
{
if(u==in[i])//在中序序列中找到这个根节点
{
k = i;
break;
}
}
int numleft = k-il;
creat(root->left,prel+1,prel+numleft,inl,inl+numleft-1);
creat(root->right,prel+numleft+1,prer,inl+numleft+1,inr);
}
-
Hash表
1.平方探测法
建表
for(int i=0;i<tsize;i++)//这个是只有正方向的平方探测法,建立最多tsize次
{ //tsize是表的尺寸
int pos = (a + j*j)%tsize;//a是插入的元素,pos是插入的位置
if(hashtable[pos]==0)//找到一个空位置
{
hashtable[pos] = a;
break;
}
}
查询
for(int i=0;i<=tsize;i++)//这个最多要查询tsize+1次
{
int pos =(a+i*i)%tsize;//a为要查询的数字,pos是位置
if(hashtable[pos]==a||hashtable[pos]==0)//无论是找到了数字,还是当前位置为空查找都结
{ //束了
break;
}
}
注意:建立最多循环tsize次,查询最多tsize+1次。而且查询结束有两种情况,找到算一种。表中元素为空,代表这个元素 没在hash表中。因为这个位置为空,平方探测法计算的下一个位置也一定为空。