【資料結構1-1】線性表 P1160 佇列安排
阿新 • • 發佈:2021-11-01
用結構體陣列當作連結串列是個好辦法
題解
顯然是個簡單的連結串列,分別寫好左插入、右插入和刪除即可。
注意
寫插入程式碼的時候注意操作的順序,不然會對後續操作造成影響。
AC程式碼
#include<bits/stdc++.h> using namespace std; struct Node{ int l,r; }node[100010]; void addleft(int x,int pos){ node[x].l=node[pos].l; node[x].r=pos; node[node[pos].l].r=x; node[pos].l=x; } void addright(int x,int pos){ node[x].l=pos; node[x].r=node[pos].r; node[node[pos].r].l=x; node[pos].r=x; } void del(int x){ if(node[x].l==-1) return; node[node[x].l].r=node[x].r; node[node[x].r].l=node[x].l; node[x].l=-1; node[x].r=-1; } int main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); node[1].l=0; node[1].r=100001; node[0].r=1; node[100001].l=1; int n,m,k,p; cin>>n; for(int i=2;i<=n;i++){ cin>>k>>p; if(p==0) addleft(i,k); else if(p==1) addright(i,k); } cin>>m; while(m--){ cin>>k; del(k); } int i=node[0].r; do{ cout<<i<<' '; i=node[i].r; }while(i!=100001); cout<<endl; return 0; }