一、线性表:
1、链表:(用数组模拟链表)
① :单链表:
#include<iostream>
using namespace std;
//head表示头节点的下标
//e[i]表示节点i的值
//ne[i]表示节点i的下一个点的下标
//idx储存当前已经用到了哪个节点
int head, e[i], ne[i], idx;
//链表初始化
void init()
{
head = -1;
idx = 0;
}
//在头部插入元素
void add_to_head(int x)
{
e[idx] = x;
ne[idx] = head;
head = idx;
idx ++;
}
//在k后面插入元素
void add(int k, int x)
{
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx;
idx ++;
}
//删除k后面的元素
void remove(int k)
{
ne[k] = ne[ne[k]];
}
int main()
{
return 0;
}
② :双链表:
#include<iostream>
using namespace std;
int l[i], r[i], idx, e[i];
//链表初始化
void init()
{
l[1] = 0;
r[0] = 1;
idx = 2;
}
void add(int k, int x)
{
e[idx] = x;
r[idx] = r[k];
l[idx]] = k;
l[r[k]] = idx;
r[k] = idx;
idx ++;
}
void remove(int k)
{
r[l[k]] = r[k];
l[r[k]] = l[k];
}
int main()
{
return 0;
}
2、栈和队列(用数组模拟)
①:栈:
#include<iostream>
using namedpace std;
const int N = 100010;
int stack[N], top;
//向栈顶插入一个数:
void push(int x)
{
stack[++top] = x;
}
//从栈顶弹出一个数:
void pop()
{
top --;
}
//查询栈顶元素:
int query()
{
return stack[top];
}
//查询栈是否为空:
int empty()
{
if(!top){
return 0;
}else{
return 1;
}
}
int main()
{
return 0;
}
②:队列:
#include<iostream>
using namespace std;
const int N = 100010;
int queue[N], tail = -1, head;
//向队尾插入一个数:
void tail(int x)
{
queue[++ tail] = x;
}
//查询队头元素:
int head()
{
return queue[head];
}
//弹出队头元素:
void pop()
{
head ++;
}
//查询队列是否为空:
int empty()
{
if(head <= tail){
return 0;
}else{
return 1;
}
}
int main()
{
return 0;
}