pat常用模板算法

 

目录

 

常用语法          

stl模板库

vector

        定义

        使用

常见算法

Hash表



常用语法          

  • 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表中。因为这个位置为空,平方探测法计算的下一个位置也一定为空。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值