考研第二章核心

reverse
//线性表
void reverse(Sqlist &L,int length)
{
    int high=length-1,low=0;
    while(low++<high--)
    {
        swap(L[high],L[low]);
    }
}
//链表逆置->头插,重新装卸
void reverse(LinkList &head)
{
    //把头节点卸下
    LinkList p=head->next;
    if(!p)
        return;
    head->next=NULL;
    //头插
    //r指向下一个,p充当搬运工
    LinkList r=p->next;
    while(p)
    {
        p->next=head->next;
        head->next=p;
        p=r;
        r=r->next;
    }
}
//找最大找最小
//线性表是一次遍历找到极值下标
int findMax(Sqlist &L)
{
    int k=0;//记录最大最小位置,初使为0
    for(int i=0;i<L.length;i++)
    {
        if(L[i]>L[k])
        {
            k=i;
        }
    }
    return k;
}
//链表
//方法1:最简单 令4个指针
LinkList findMax(LinkList &L)
{
    LinkList p,pre,pmin,premin;
    pre=L;
    p=L->next;
    pmin=L->next;
    premin=L;
    while(p)
    {
        if(p->data>pmin->data)
        {
            pmin=p;
            premin=pre;
        }
        pre=p;
        p=p->next;
    }
    return pmin;
    
}
//方法2:比较难想,但步骤少(踩在上一个的位置比较下一个,为了省去pre指针)
LinkList findMin(LinkList &head)
{
    LinkList p,pmin;
    pmin=head;
    p=head->next;
    while(p&&p->next)
    {
        if(p->next->data<pmin->next->data)
        {
            pmin=p;
        }
        p=p->next;
    }
    return pmin->next;
}



//链表指中间,代码非常神奇
LinkList p=head,pmin=head;
while(p->next)
{
    p=p->next;
    pmin=pmin->next;
    if(p->next)
    {
        p=p->next;
    }
}
//两表操作,求交集和并集,两表对比/二合一/一拆二
//线性表格式
for(int i=0,j=0;i<m&&j<n;i++,j++)
{
    ############
    ###########
    ##########
}
//其中一个表没遍历完,且需要遍历(求交集就不需要遍历剩下的)
if(i<m)
{
    
}
if(j<m)
{
    
}
//链表格式
while(p&&q)
{
    
}
//只求交集不需要处理剩余
while(p)
{
    
}
while(q)
{
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值