1. 程式人生 > 其它 >excel基礎應用

excel基礎應用

實現一個雙鏈表,雙鏈表初始為空,支援5 種操作:

  1. 在最左側插入一個數;
  2. 在最右側插入一個數;
  3. 將第k 個插入的數刪除;
  4. 在第k 個插入的數左側插入一個數;
  5. 在第 k 個插入的數右側插入一個數

現在要對該連結串列進行 M次操作,進行完所有操作後,從左到右輸出整個連結串列。

#include <iostream>
using namespace std;
const int N = 100010;
int e[N], l[N], r[N], idx;

void init () {
    r[0] = 1, l[1] = 0;
    idx = 2;
}

void add (int k, int x) {
    e[idx] = x;
    l[idx] = k, r[idx] = r[k];
    l[r[k]] = idx, r[k] = idx;
    idx++;
}

void remove (int k) {
    r[l[k]] = r[k];
    l[r[k]] = l[k];
}

int main() {
    init ();
    int m;
    cin >> m;
    while (m--) {
        string s;
        cin >> s;
        if (s == "L") {
            int x;
            cin >> x;
            add (0, x);
        }
        else if (s == "R") {
            int x;
            cin >> x;
            add (l[1], x);
        }
        else if (s == "D") {
            int k;
            cin >> k;
            remove (k + 1);
        }
        else if (s == "IL") {
            int k, x;
            cin >> k >> x;
            add (l[k + 1], x);
        }
        else {
            int k, x;
            cin >> k >> x;
            add (k + 1, x);
        }
    }
    
    for (int i = r[0]; i != 1; i = r[i]) cout << e[i] << " ";
    return 0;
}