【暖*墟】 #链表# 邻值查找 + 动态中位数离线做法

目录

链表的特征

// struct储存建立

// 建新链表,初始时将head、tail相连

// 在p后插入包含数据val的新节点

// 删除元素p

// 链表内存回收

// 数组模拟链表清空

【例题】邻值查找

【例题】动态中位数的离线做法 poj3784


链表的特征

支持在任意位置插入或删除,但只能按顺序访问其中的元素。

常用于“倒序处理”,因为链表容易执行“删除”操作。

以struct存储节点的价值,以及prev,next。

prev,next两个指针指向前后相邻的两个节点,构成双向链表。

通常建立额外的两个节点head、tail来代表链表的头尾,规范边界。

 

// struct储存建立

struct Node{
    int value; //数据
    Node *prev,*next; //指针
};
Node *head,*tail;

或者

struct Node{
    int value; 
    int prev,next; 
}node[SIZE];
int head,tail,tot;

 

// 建新链表,初始时将head、tail相连

void init(){
    head=new Node();
    tail=new Node();
    head->next = tail;
    tail->prev = head;
}

或者

void init(){
    tot=2; head=1; tail=2;
    node[head].next=tail;
    node[tail].prev=head;
}

// 在p后插入包含数据val的新节点

void insert(Node *p,int val){
    q=new node();
    q->value = val;
    p->next->prev = q; 
    //↑↑↑在p原来连接的next上,prev值变成q
    q->next = p->next;
    p->next = q;
    q->prev = p;
}

或者

void insert(int p,int val){
    q=++tot; //增加新的编号
    node[q].value=val;
    node[node[p].next].prev=q;
    node[q].next=node[p].next;
    node[p].next=q;
    node[q].prev=p;
}

 

// 删除元素p

void remove(Node *p){
    p->prev->next=p->next;
    p->next->prev=p->prev;
    delete p; //指针型记得写删除
}

或者

void remove(int p){
    no
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值