栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

单联表题目用数组模拟单链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单联表题目用数组模拟单链表

单联表

题目:acwing 单链表

答案:思路:

此题需要知道每个节点的插入时间,用普通的链表肯定行不通,因此我们用数组模拟链表,e数组只是用来记录每个节点的数值,ne数组是记录每个节点的下一个节点,所以本质上ne数组是记录链表条链的。

#include 
#include 

using namespace std; 

const int N=1000010;
//存头结点所指向的数组下标
int head;
//每个节点存的值
int e[N];
//每个节点的next指针
//ne数组实际上是存的e数组的下标
int ne[N];
//代表每个在操纵的节点
int idx;
int a;
//初始化链表,这时的head头结点没有指向的e数组下标,所以为-1
void init(){
    //一个节点对应的ne[i]如果存的是-1代表它之后没有节点了,它就是最后一个
	 head=-1;
	 idx=0;
}
void add_head(int n){
	e[idx]=n;
	ne[idx]=head;
	head=idx;
	idx++;

}

void remove(int k){
	ne[k]=ne[ne[k]];
	
}
void add(int k,int n){
	e[idx]=n;
	ne[idx]=ne[k];
	ne[k]=idx;
	idx++;
}
int main(){

    head=-1;idx=0;
    cin>>a;
    while(a--){
        string op;
        int k,x;
        cin>>op;
        if(op=="D")
        {

            cin>>k;
            if(!k)head=ne[head];
            remove(k-1);
        }
        else if(op=="H")
        {
            cin>>x;
            add_head(x);
        }
        else if(op=="I"){
            int k,x;
            cin>>k>>x;
            add(k-1,x);
        }
    }
    //从head开始遍历链表直到遍历到最后一个节点
    for(int i=head;i!=-1;i=ne[i])
      cout< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917314.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号