用数组模拟链表的好处是方便,代码量少,而且不需要用到指针,减少因为指针出现的错误。
在静态链表中,我们使用head表示头节点的下标,初状态下head=-1,说明表空。
将元素加入到头节点之后,head更新为这个元素的下标,表示这个元素就是这个表的新头节点。
具体可以看看代码,比较简单。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #include <iostream> using namespace std;const int N = 100010 ;int head, e[N], ne[N], idx;int m;char mode;void init () { head = -1 ; idx = 0 ; } void add_to_head (int x) { e[idx] = x, ne[idx] = head, head = idx++; } void add (int k, int x) { e[idx] = x, ne[idx] = ne[k], ne[k] = idx++; } void del (int k) { ne[k] = ne[ne[k]]; } void print () { for (int i = head; i != -1 ; i = ne[i]) cout << e[i] << ' ' ; } int main () { cin >> m; init (); while (m --) { int x, k; cin >> mode; if (mode == 'H' ) cin >> x, add_to_head (x); if (mode == 'I' ) cin >> k >> x, add (k - 1 , x); if (mode == 'D' ) { cin >> k; if (k == 0 ) head = ne[head]; else del (k - 1 ); } } print (); }