• 双链表和循环链表小结


    1.双链表

    特点:方便查找一个节点的前,后相邻节点
    (1)已知某个节点的地址,删除他的时间O(1)

    修改p节点前驱节点的next指针和p节点后继节点是prior指针
    p->prior->next = p->next;
    p->next->prior = p->prior;
    (2)在某个节点的前后插入一个节点的时间为O(1)

    1.p->prior->next = q;
    2.q->prior = q->prior;
    3.q->next = p
    4.q->prior = q

    2.循环链表

    1.循环单链表:构成一个环(可以循环查找)
    2.循环双链表:构成两个环(可以循环查找,可以通过头节点快速找到尾节点)
    删除尾节点,在尾节点前后插入一个节点的时间均为0(1)

    3.有序表

    题目如下:假设一个有序表的采用顺序表存储,设计一个高效算法删除重复的元素

    列如:L=(1,1,1,2,2,2,3,3,3)------>L=(1,2,3)
    利用删除所有值为x的元素的算法思路:
    void deleupnode1(SQlist *&L)
    {
    int k = 1;//k记录保留元素的个数
    int i;
    for(i = 1;i < L->length;i++)
    if(L->data[i]!=L->data[i-1])//这里不懂
    {
    L->data[k] = L->data[i];
    k++;//保留的元素增1
    }
    L->length = k; //顺序表L的长度等于k
    }

    2.

    //两个单链表中求解公共元素
    void InterSect(LinkList ha,LinkList hb,LinkList &hc)
    {
    LinkList pa = ha->next,pb=hb->next,
    s,
    r;
    hc = (LinkNode
    )malloc(sizeof(LinkNode));
    r = hc;//r指向尾节点
    while(pa!=NULL&&pb!=NULL)
    {
    if(pa->datadata)
    pa = pa->next;
    if(pa->data>pb->data)
    pb = pb->next;
    if(pa->data==pb->data)
    {
    s=(LinkNode*)malloc(sizeof(LinkNode):
    s->data=pa->data;
    r->next = s;
    r = s;
    pa = pa->next;
    pb = pb->next;
    }
    }
    r->next = NULL;
    }

  • 相关阅读:
    hdu2476
    zoj3469 区间dp好题
    区间dp好题cf149d 括号匹配
    cf1108e 线段树区间更新+扫描线
    完全背包记录路径poj1787 好题
    cf1104d二分+数学
    01背包专题
    hdu1069线性dp
    有源汇的上下界最大流
    有源汇的上下界最大流
  • 原文地址:https://www.cnblogs.com/huqingqing2/p/14221345.html
Copyright © 2020-2023  润新知