1. 程式人生 > >【模板】連結串列的兩種實現形式

【模板】連結串列的兩種實現形式

摘自李煜東《演算法競賽進階指南》

//連結串列模板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; }