数据结构——双向链表(数组模拟)
Posted flydoggie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构——双向链表(数组模拟)相关的知识,希望对你有一定的参考价值。
#include<iostream> using namespace std; const int N = 100010; int val[N],le[N],ri[N]; int idx; int n,m; //初始化 ri[0] 和 le[1]分别为双链表的左右端点 void init(){ ri[0] = 1, le[1] = 0; idx = 2; } //在节点k的右侧插入一个数 void add(int k,int x){ val[idx] = x; ri[idx] = ri[k]; le[idx] = k; le[ri[k]] = idx; ri[k] = idx; idx++; } //删除节点k void del(int k){ le[ ri[k] ] = le[k]; ri[ le[k] ] = ri[k]; } int main(){ cin>>n; string ch; init(); int k,x; while(n--){ cin>>ch; if(ch == "L"){ cin>>x; add(0,x); } if(ch == "R"){ cin>>x; add(le[1],x); } if(ch == "D"){ cin>>x; del(x+1); } if(ch == "IL"){ cin>>k>>x; add(le[k+1],x); } if(ch == "IR"){ cin>>k>>x; add(k+1,x); } } for(int i = ri[0] ; i != 1 ; i = ri[i]){ cout<<val[i]<<" "; } cout<<endl; return 0; }
以上是关于数据结构——双向链表(数组模拟)的主要内容,如果未能解决你的问题,请参考以下文章