标题 数组实现单链表,栈,队列
开门见山的说,
单链表用数组的模式实现需要有俩个东西,而用数组去实现单链表最大原因就是减去new的操作。数组实现单链表需要和结构体链表差不多也需要一个数据域和一个指针域
cosnt int maxn = 1e5+5;
数据域 定义数组 val[maxn],指针域 定义数组 ne[maxn]
链表需要一个头结点 即head,接着我们还需要一个坐标来确定这个数组的位置有没有被用过
定义 idx。
然后初始化操作 就是 head = -1, idx = 0
void init()
{
head = -1;
idx = 0;
}
初始化过后,首先链表要执行的基本操作就是增加一个节点
void add(int x)//实现头插法
{
val[idx] = x;//此时idx未用,用上idx存储数据域
ne[idx] = head;//让本节点指向下一个指针
head = idx ++;//让头节点向前移动
}
增的操作结束后,进行删除操作
void del(int k)//删除第k个数后面一个数
{
ne[k] = ne[ne[k]];
}
接着插入操作
void insert(int k,int x)//在第k个数后面插入一个数
{
val[idx] = x;
ne[idx] = ne[ne[k]];
ne[x] = idx ++;
}
######################################################################
接着用数组实现栈操作
非常简单,首先栈的核心就是后入先出
用数组模拟的话 就定义一个 stk[],然后,我们还需要一个栈顶来存入这个栈
简单用top 来当做栈顶 即 top = -1;
int stk[maxn],top = -1;//建立起一个简单栈
接着是推入栈的操作
int x;
cin >> x;
stk[++top] = x;
然后是出栈的操作
--top;
然后就是取栈顶的操作
stk[top];
最后是判断栈是否空
if(top == -1)
######################################################################
接着是用数组实现队列
队列的关键就是先入先出
因此,我们需要一个队头和一个队尾巴,hh = 0,tt = -1
int hh = 0, tt = -1;
int queue[maxn];
然后就是入队操作
int x;
cin >> x;
queue[++tt] = x;
然后是出队的操作
++hh;
最后是判断队列是否为空
if(hh > tt)//队空
######################################################################