//鏈表--鏈式存儲的線性表?
//存信息和下一個節點位置,數據域和指針域合起來叫節點
//帶頭(哨兵位)下標為0?
//單向,雙向,循環鏈表
//實現 單
//倆足夠大數組?
// elem,數據域?
// next ,指針域
//下標
//head,頭結點下標;id新節點位置 ?h=0,id=0;
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;?
//定義,初始化
int e[N],ne[N],h,id;
int mp[N];?
//?? ?頭插,,兵 , ? ,下一節點?
// ? ? ? ? ? ? (x)
void push_front(int x)
{
id++;
e[id]=x;
mp[x]=id;?
ne[id]=ne[h];
ne[h]=id;
//mp[x]=id;
}?
// 遍歷,打印?
void print()?
{
//?? ?for(int i=1;i!=)
for(int i=ne[h];i;i=ne[i])
{
cout<<e[i]<<" ";
}
}
//按值查找下標?
int find (int x)
{
//?? ?for(int i=ne[h];i;i=ne[i])
//?? ?{
//?? ??? ?if(e[i]==x) return i;?
//?? ?}return 0;
//按值查找方法二,重新標記數組哈希 cout<<mp[x];
// 太大開不了,不能存重復?
return mp[x];
}?
//任意 ? 存儲 ?位置(實際存的下標的位置) 之 后 插入元素
// ? p
// ? x ? ? y
// ? ? ?z
void insert(int p,int x)
{
id++;
e[id]=x;
mp[x]=id;
ne[id]=ne[p];
ne[p]=id;
}?
// 刪除任意(存儲位置p)之后位置
// ? ?p
// ? ?x ? ?y ? ? z ? ? ?
void erase (int p)?
{
if(ne[p])
{
ne[p]=ne[ne[p]];
mp[e[ne[p]]]=0;
}
}
int main()
{
for(int i=0;i<6;i++)
push_front(i);// 5 4 3 2 1 0?
print();
cout<<endl<<find (5);//6
cout<<endl<<find (0);//1
cout<<endl;
insert(1 ,88);
print();
cout<<endl;
insert(6,99);
print();
cout<<endl;
insert(3 ,33);
print();
cout<<endl;
insert(7 ,100);
print();
cout<<endl;
insert(8 ,666);
print();
cout<<endl;
erase(4);
print();
cout<<endl;
erase(3);//第三個已經刪沒了
print();
cout<<endl;
erase(4);
print();
return 0;
}