const int N = 1e5+10;
单链表
int head, e[N], ne[N], idx;
//单链表初始化
void init()
{
head = -1, idx = 0;
}
//在表头处插入
void insert_head(int x)
{
e[idx] = x, ne[idx] = head, head = idx ++;
}
//在第k个位置插入
void insert(int k, int x)
{
e[idx] = x, ne[idx] = ne[k], ne[k] = idx ++;
}
//删除表头元素
void remove_head()
{
head = ne[head];
}
//删除第k个数
void remove(int k)
{
ne[k] = ne[ne[k]];
}
//打印单链表
void print()
{
for ( int i = head; i != -1; i = ne[i] ) cout << e[i] << " ";
}
双链表
int e[N], r[N], l[N], idx;
//双链表初始化
void init()
{
r[0] = 1, l[1] = 0;
idx = 2;
}
//在第k个数的右边插入一个数
void insert(int k, int x)
{
e[idx] = x;
r[idx] = ne[k], l[idx] = k;
l[r[k]] = idx, r[k] = idx ++;
}
//删除第k个数
void remove(int k)
{
r[l[k]] = r[k], l[r[k]] = l[k];
}
//打印双链表
void print()
{
for ( int i = r[0]; i != 1; i = r[i] ) cout << e[i] << " ";
}
栈
int st[N], tt;
//栈初始化
void init()
{
tt = 0;
}
//压栈
void push(int x)
{
st[++ tt] = x;
}
//弹栈
void pop()
{
tt --;
}
//判断栈是否为空
bool is__empty()
{
return tt > 0;
}
//取栈顶
int get_top()
{
return st[tt];
}
队列
int q[N], hh, tt;
//队列初始化
void init()
{
hh = 0, tt = -1;
}
//入队
void push(int x)
{
q[++ tt] = x;
}
//出队
void pop()
{
hh ++;
}
//判断队是否为空
bool is__empty()
{
return hh <= tt;
}
//取队首
int get_top()
{
return q[hh];
}