【模板】链表的两种实现形式

摘自李煜东《算法竞赛进阶指南》

//链表模板1
struct Node{
    int value;//数据
    Node *prev,*next;//指针 
}; 
Node *head,*tail;
void initialize()//建新链表 
{
    head=new Node();
    tail=new Node();
    head->next=tail;
    tail->prev=head;
}
void insert(Node *p,int val)//在p后插入包含数据val的新节点 
{
    q=new Node();
    q->value=val;
    p->next->prev=q;
    q->next=p->next;
    p->next=q;q->prev=p;
}
void remove(Node *p)//删除p 
{
    p->prev->next=p->next;
    p->next->prev=p->prev;
    delete p;
}
void recycle()//链表内存回收 
{
    while(head!=tail)
    {
        head=head->next;
        delete head->prev;
    }
    delete tail;
}
//链表模板2
struct Node{
    int value;
    int prev,next;
}node[SIZE];
int head,tail,tot;
int initialize()//建新链表 
{
    tot=2;
    head=1,tail=2;
    node[head].next=tail;
    node[tail].prev=head;
}
int insert(int p,iny val)//在p后插入包含数据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;
}
void remove(int p)//删除p 
{
    node[node[p].prev].next=node[p].next;
    node[node[p].next].prev=node[p].prev;
}
void clear()//数组模拟链表清空 
{
    memset(node,0,sizeof(node));
    head=tail=tot=0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值