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)
{
}
考研第二章核心
于 2022-08-29 17:07:43 首次发布