数据结构-第二章线性表-课后习题1-10

第二章线性表-习题1-10

目录

第二章线性表-习题1-10

1.将两个递增的有序表LA和LB合并为一个递增的有序链表LC。 

//---第二章线性表-习题1---//

2.将两个非递减的有序链表LA和LB合并为一个非递增的有序链表LC。 

//---第二章线性表-习题2---//

3.A与B的交集。 

//---第二章线性表-习题3---//

4.LA和LB差集的结果存储于LA中,n是结果集合中元素个数,调用时为0。 

//---第二章线性表-习题4---//

5.单链表A分解为两个具有相同结构的链表B和C。 

//---第二章线性表-习题5---//

6.确定单链表中值最大的结点。 

//---第二章线性表-习题6---//

7.逆置带头结点的单链表。 

//---第二章线性表-习题7---//

8.删除递增有序链表L中值大于mink且小于maxk的所有元素。 

//---第二章线性表-习题8---//

9.在双向循环链表,交换p所指向的结点及其前驱结点的顺序。 

//---第二章线性表-习题9---//

10.删除顺序表A中所有值为item的元素。 

//---第二章线性表-习题10---//


1.将两个递增的有序表LA和LB合并为一个递增的有序链表LC。 

//---第二章线性表-习题1---//

void MergeList_1(LinkList &LA,LinkList &LB,LinkList &LC)
{
    //将两个递增的有序表LA和LB合并为一个递增的有序链表LC 
    LinkList pa=LA->next;
    LinkList pb=LB->next;
    LinkList pc=LC=LA;
    while(pa&&pb)
    {
        if(pa->data<pb->data)
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }
        else if(pa->data>pb->data)
        {
            pc->next=pb;
            pc=pb;
            pb=pb->next;
        }
        else
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
            LinkList q=pb->next;
            delete pb;
            pb=q;    
        }
        pc->next=pa?pa:pb;
        delete LB;
    }        

2.将两个非递减的有序链表LA和LB合并为一个非递增的有序链表LC。 

//---第二章线性表-习题2---//

void MergeList_2(LinkList &LA,Linklist &LB,LinkList &LC)
{
    //将两个非递减的有序链表LA和LB合并为一个非递增的有序链表LC 
    LinkList pa=LA->next;
    LinkList pb=LB->next;
    LinkList pc=LC=LA;
    LC->next=NULL;
    while(pa||pb)
    {
        if(!pa)
        {
            LinkList q=pb;
            pb=pb->next;
        }
        else if(!pb)
        {
            LinkList q=pa;
            pa=pa->next;
        }
        else if(pa->data<=pb->data)
        {
            LinkList q=pa;
            pa=pa->next;
        }
        else
        {
            LinkList q=pb;
            pb=pb->next;
        }
        q->next=LC->next;
        LC->next=q;
    }    
    delete LB;
}

3.A与B的交集。 

//---第二章线性表-习题3---//

void InsertSection(LinkList &LA,LinkList &LB,LinkList &LC)
{
    //A与B的交集 
    LinkList pa=LA->next;
    LinkList pb=LB->next;
    LinkList pc=LC=LA;
    while(pa&&pb)
    {
        if(pa->data==pb->data)
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
            LinkList q=pb;
            pb=pb->next;
            delete q;    
        }
        else if(pa->data<pb->data)
        {
            LinkList q=pa;
            pa=pa->next;
            delete q;
        }
        else
        {
            LinkList q=pb;
            pb=pb->next;
            delete q;
        }
    }
    while(pa)
    {
        LinkList q=pa;
        pa=pa->next;
        delete q;
    }
    while(pb)
    {
        LinkList q=pb;
        pb=pb->next;
        delete q;
    }
    pc->next=NULL;
    delete LB;
}

4.LA和LB差集的结果存储于LA中,n是结果集合中元素个数,调用时为0。 

//---第二章线性表-习题4---//

void Difference(LinkList &LA,LinkList &LB,int &n)
{
    //LA和LB差集的结果存储于LA中,n是结果集合中元素个数,调用时为0 
    LinkList pa=LA->next;
    LinkList pb=LB->next;
    LinkList pre=LA;
    while(pa&&pb)
    {
        if(pa->data<pb->data)
        {
            n++;
            pre=pa;
            pa=pa->next;
        }
        else if(pa->data>pb->data)
        {
            pb=pb->next;
        }
        else
        {
            pre->next=pa->next;
            LinkList u=pa;
            pa=pa->next;
            delete u;    
        }
    }
    while(pa)
    {
        n++;
        pa=pa->next;
    }
}

5.单链表A分解为两个具有相同结构的链表B和C。 

//---第二章线性表-习题5---//

void Decompose(LinkList &A,LinkList &B,LinkList &C)
{
    //单链表A分解为两个具有相同结构的链表B和C 
    B=A;
    B->next=NULL;
    C=new LNode;
    C->next=NULL;
    p=A->next;
    while(p!=NULL)
    {
        LinkList r=p->next;
        if(p->data<0)
        {
            p->next=B->next;
            B->next=p;
        }
        else
        {
            p->next=C->next;
            C->next=p;
        }
        p=r;
    }
}

6.确定单链表中值最大的结点。 

//---第二章线性表-习题6---//

ElemType Max(LinkList L)
{
    //确定单链表中值最大的结点
    if(L->next==NULL) return ERROR;
    LinkList pmax=L->next;
    LinkList p=L->next->next;
    while(p!=NULL)
    {
        if(pmax->data<p->data)
        {
            pmax=p;
        }
        p=p->next;
    } 
    return pmax->data;
}

7.逆置带头结点的单链表。 

//---第二章线性表-习题7---//

void Inverse(LinkList &L)
{
    //逆置带头结点的单链表
    LinkList p=L->next;
    L->next=NULL;
    while(p!=NULL)
    {
        LinkList q=p->next;
        p->next=L->next;
        L->next=p;
        p=q;
    } 
}

8.删除递增有序链表L中值大于mink且小于maxk的所有元素。 

//---第二章线性表-习题8---//

void DeleteMinMax(LinkList &L,int mink,int maxk)
{
    //删除递增有序链表L中值大于mink且小于maxk的所有元素
    LinkList p=L->next;
    while(p&&p->data<=mink)
    {
        LinkList pre=p;
        p=p->next;
    }
    while(p&&p->data<maxk)
    {
        p=p->next;
    } 
    LinkList q=pre->next;
    pre->next=p;
    while(q!=p)
    {
        LinkList s=q->next;
        delete q;
        q=s;
    }
}

9.在双向循环链表,交换p所指向的结点及其前驱结点的顺序。 

//---第二章线性表-习题9---//

void Exchange(DuLinkList p)
{
    //在双向循环链表,交换p所指向的结点及其前驱结点的顺序
    DuLinkList q=p->prior;
    q->prior->next=p;
    p->prior=q->prior;
    q->next=p->next;
    q->prior=p;
    p->next->prior=q;
    p->next=q; 
}

10.删除顺序表A中所有值为item的元素。 

//---第二章线性表-习题10---//

void DeleteItem(SqList &A,ElemType item)
{
    //删除顺序表A中所有值为item的元素
    int k=0;
    for(int i=0;i<A.length;i++)
    {
        if(A.elem[i]!=item)
        {
            A.elem[k]=A.elem[i];
            k++; 
        }
        A.length=k;    
    } 
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值