数组模拟单链表(静态链表)
链表
数据对象的存储结构可以分为两种:0顺序存储结构和链式存储结构
顺序存储结构要求所有的元素依次存放在一片连续的存储空间中
链式存储结构无需占用一整块存储空间,但是为了表示节点之间的关系,需要给每一个节点附加指针字段,用于存放后继元素的存储地址。
单链表的数组模拟实现
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| #include <iostream>
using namespace std;
const int N = 100010;
int e[N], ne[N], head, idx;
void init() { head = -1; idx = 0; }
void add_to_head(int x) { e[idx] = x; ne[idx] = head; head = idx; idx++; }
void add(int k, int x) { e[idx] = x; ne[idx] = ne[k]; ne[k] = idx; idx++; }
void remove(int k) { ne[k] = ne[ne[k]]; }
int main() { init(); int m; cin >> m; while (m--) { int x, k; char op; cin >> op; if (op == 'H') { cin >> x; add_to_head(x); } else if (op == 'D') { cin >> k; if (k == 0) head = ne[head]; remove(k - 1); } else { cin >> k >> x; add(k - 1, x); } } for (int i = head; i != -1; i = ne[i]) cout << e[i] << ' ';
return 0; }
|
单链表的局限性
单链表不能在链表的任意位置插入一个数据,因为单链表只能找到某一个数据的后继,而不能找到一个数据的前导。
要解决这一个问题,要使用到双链表。