链表

指针版

 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 }

 

posted @ 2019-04-05 11:35  universeplayer  阅读(109)  评论(0编辑  收藏  举报