//用数组去模拟链表 栈与队列
struct Node{
int val;
Node *next;
};//第一种方式是不讲的 这种方式在面试题中比较多
//但是在笔试题中用的不是很多
//因为这种方式在每次新建一个链表的时候都要调用一下new函数
new Node();
//new 一个新的节点这个操作是非常慢的
//一般在笔试题里数据大小一般在10w 100w这个级别
//如果new 10w 100w 就会超时
//如果改进下是可以的 比如new n个节点 但是这样就和数组差不多了
//因为用指针 结构体去做链表的话效率慢
//单链表主要用邻接表 其实是n个链表 主要用来存储图和树
//双链表主要用来优化某些问题
//链表用数组表示
//空节点下标用-1来表示
#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int stk[N], tt;
//插入
stk[++tt] = x;
//弹出
tt--;
//判断栈是否为空
if(tt > 0) not empty
else empty
//栈顶
stk[tt];
// ************************ 队列
// 在队尾插入元素,在队头弹出元素
int q[N], hh, tt = -1;
//插入
q[++tt] = x;
//弹出
hh++;
// 判断队列是否为空
if (hh <= tt) not empty
else empty
// 取出队头元素
q[hh]
// 取出队尾元素
q[tt]