单链表
acwing826
#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e5+5;
int e[N],head,idx,ne[N];
void init(){
head = -1;
idx = 0;
}
void insert(int x){
e[idx] = x;
ne[idx] = head;
head = idx++;
}
void remove(int k){
ne[k] = ne[ne[k]];
}
void insertt(int k,int x){
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx++;
}
int main(){
int n;
char ch;
cin>>n;
init();
while(n--){
cin>>ch;
if(ch=='H'){
int x;
cin>>x;
insert(x);
}
else if(ch=='D'){
int k;
cin>>k;
if(!k) head = ne[head];
remove(k-1);
}
else if(ch=='I'){
int k,x;
cin>>k>>x;
insertt(k-1,x);
}
}
for(int i=head;i!=-1;i=ne[i]) printf("%d ",e[i]);
return 0;
}
双链表
acwing827
#include<iostream>
#include<string>
using namespace std;
const int N = 1e5+5;
int e[N],l[N],r[N],idx;
void init(){
r[0] = 1;
l[1] = 0;
idx = 2;
}
void insert(int k,int x){
e[idx] = x;
r[idx] = r[k];
l[r[k]] = idx;
l[idx] = k;
r[k] = idx++;
}
void remove(int k){
r[l[k]] = r[k];
l[r[k]] = l[k];
}
int main(){
int m;
cin>>m;
init();
while(m--){
string s;
cin>>s;
if(s=="L"){
int x;
cin>>x;
insert(0,x);
}
else if(s=="R"){
int x;
cin>>x;
insert(l[1],x);
}
else if(s=="D"){
int k;
cin>>k;
remove(k+1);
}
else if(s=="IL"){
int k,x;
cin>>k>>x;
insert(l[k+1],x);
}
else {
int k,x;
cin>>k>>x;
insert(k+1,x);
}
}
for(int i=r[0];i!=1;i=r[i]) printf("%d ",e[i]);
return 0;
}
模拟栈
acwing828
acwing3302
#include<iostream>
using namespace std;
const int M = 1e5+5;
int sta[M],top;
void init(){
top = -1;
}
bool empty(){
if(top>=0) return false;
return true;
}
void push(int x){
sta[++top] = x;
}
void pop(){
if(!empty) top--;
}
int query(){
if(!empty) return sta[top];
}
int main(){
int m;
cin>>m;
while(m--){
string s;
cin>>s;
if(s=="push"){
int x;
cin>>x;
push(x);
}
else if(s=="query") printf("%d\n",query());
else if(s=="pop") pop();
else {
if(empty()) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}
模拟队列
acwing829
#include<iostream>
#include<string>
using namespace std;
const int N = 1e5+5;
int q[N],hh,tt;
void init(){
hh = 0,tt = -1;
}
bool empty(){
if(hh>tt) return true;
return false;
}
void push(int x){
q[++tt] = x;
}
void pop(){
if(!empty()) hh++;
}
int query(){
if(!empty()) return q[hh];
}
int main(){
int n;
cin>>n;
init();
while(n--){
string s;
cin>>s;
if(s=="push"){
int x;
cin>>x;
push(x);
}
else if(s=="empty"){
if(empty()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
else if(s=="pop") pop();
else cout<<query()<<endl;
}
return 0;
}