数组模拟单链表C++

(萌新第一次来文章)
数组模拟单链表
注意事项:
全局定义

const int N=100010;
int head=-1;//头指针
int idx=0;//当前位置
int e[N],ne[N]//e表示值,ne表示next

1.头插法

void add_to_head(int  n)
{
   e[idx]=n;
  ne[idx]=head;
  head=idx++;
}

2.删除操作

void Delete(int n)
{
   ne[n]=ne[ne[n]];
}

3插入操作

void Insert(int k,int f)
{
  e[idx]=f;
  ne[idx]=ne[k];
  ne[k]=ne[idx];
}

具体对应体型AcWing826.单链表:[https://www.acwing.com/problem/content/828/]
实现代码:

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
const int N=100010;
int head=-1, idx=0;
//e存储数据,ne存储指针
int ne[N],e[N];
//头插法建立链表
void H(int n)
{
    e[idx]=n;
    ne[idx]=head;
    head=idx;
    idx++;
}
//删除第k个插入的数后面的数
void Delete(int n)
{
    ne[n]=ne[ne[n]];//可以类比指针实现链表中的n->next=n->next->next;

}
void Insert(int k,int f)//在第k个后面插入一个f
{
    e[idx]=f;
    ne[idx]=ne[k];
    ne[k]=idx++;
}
void Cout()
{
    for(int i=head;i!=-1;i=ne[i])
    {
        cout<<e[i]<<" ";
    }
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        char n1;
        cin>>n1;
        if(n1=='H')
        {
            int num;
            cin>>num;
            H(num);
        }
        if(n1=='D')
        {
            int num;
            cin>>num; 
            if (!num) head=ne[head];
            else 
            Delete(num-1);
        }
        if(n1=='I')
        {
            int k,f;
            cin>>k>>f;
           Insert(k-1,f);
        }
    }
    Cout();
    cout<<endl;
    return 0;
}

值得需要注意的是,在删除操作中,当输入为0的时候,链表全部清零,所以要分类讨论

posted @   划水马师傅  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示