链表
指针版
1 // 双向链表 2 struct Node 3 { 4 int value; // data 5 Node *prev, *next; // pointers 6 }; 7 Node *head, *tail; 8 9 void newlist() // create an empty list 10 { 11 head = new Node(); 12 tail = new Node(); 13 head->next = tail; 14 tail->prev = head; 15 } 16 17 void insert(Node *p, int value) // insert data after p 18 { 19 q = new Node(); 20 q->value = value; 21 p->next->prev = q; q->next = p->next; 22 p->next = q; q->prev = p; 23 } 24 25 void remove(Node *p) // remove p 26 { 27 p->prev->next = p->next; 28 p->next->prev = p->prev; 29 delete p; 30 } 31 32 void recycle() // release memory 33 { 34 while (head != tail) 35 { 36 head = head->next; 37 delete head->prev; 38 } 39 delete tail; 40 }
数组模拟
1 // 数组模拟链表 2 struct Node 3 { 4 int value; 5 int prev, next; 6 } node[SIZE]; 7 int head, tail, tot; 8 9 void newlist() 10 { 11 tot = 2; 12 head = 1, tail = 2; 13 node[head].next = tail; 14 node[tail].prev = head; 15 } 16 17 int insert(int p, int value) 18 { 19 q = ++tot; 20 node[q].value = value; 21 node[node[p].next].prev = q; 22 node[q].next = node[p].next; 23 node[p].next = q; node[q].prev = p; 24 } 25 26 void remove(int p) 27 { 28 node[node[p].prev].next = node[p].next; 29 node[node[p].next].prev = node[p].prev; 30 }