【模板】連結串列的兩種實現形式
阿新 • • 發佈:2019-02-08
摘自李煜東《演算法競賽進階指南》
//連結串列模板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;
}