用数组模拟链表

单链表

邻接表(n个链表),应用:存储树和图

e数组存储值,ne模拟存储指针,二者由下标关联起来,空结点的下表用-1表示

#include<iostream>using namespace std;const int N=100010;int head,e[N],ne[N],idx;
//单链表初始化
void init()
{head=-1;idx=0;
}
//H(链表头),向链表头插入一个数,即给链表head指向的那个节点插入一个值为x的值
void add_tohead(int x)
{e[idx]=x;ne[idx]=head,head=idx;idx++;
}
//I 向单链表第k个插入的数后插入一个值为x的数
void add(int k,int x)
{e[idx]=x;ne[idx]=ne[k];ne[k]=idx;idx++;
}
//D 删除第k个插入的数后面的数
void remove(int k)
{ne[k]=ne[ne[k]];
}int main()
{int m;cin>>m;init();while(m--){char op;int k,x;cin>>op;if(op=='H'){cin>>x;add_tohead(x);}else if(op=='D'){cin>>k;if(!k) head=ne[head];else remove(k-1);}else{cin>>k>>x;add(k-1,x);}}//*****从head开始对e[i]进行输出,for(int i=head;i!=-1;i=ne[i]) cout<<e[i]<<" ";cout<<endl;return 0;
}

双链表

用来优化某些问题

#include<iostream>using namespace std;const int N=100010;int l[N],r[N],e[N],idx;//双链表初始化
void init()
{//0表示左端点,1表示右端点r[0]=1;l[1]=0;idx=2;
}
//在第k个插入的数的右端插入值为x的数
void add(int k,int x)
{e[idx]=x;l[idx]=k;r[idx]=r[k];l[r[k]]=idx;r[k]=idx;idx++;
}//删除第k个数
void remove(int k)
{l[r[k]] = l[k];       //k节点的右节点的左指针指向k节点的左节点r[l[k]] = r[k];       //k节点的左节点的右指针指向k节点的右节点
}int main()
{int m;cin>>m;init();while(m--){string op;int k,x;cin>>op;if(op=="L"){cin>>x;//在双链表的最左边插入值为x的节点,所以用0;add(0,x);}else if(op=="R"){cin>>x;//在双链表的最右边插入值为x的节点,所以用l[1]add(l[1],x);}else if(op=="D"){cin>>k;//删除第k个插入的数remove(k+1);}else if(op=="IL"){cin>>k>>x;//在双链表的第k个插入的数左边插入值为x的节点add(l[k+1],x);}else if(op=="IR"){cin>>k>>x;//在双链表的第k个插入的数右边插入值为x的节点add(k+1,x);}}for(int i=r[0];i!=1;i=r[i]) cout<<e[i]<<" ";cout<<endl;return 0;
}

链表(单链表,双链表)相关推荐

  1. 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表

    循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...

  2. 链表之删除双链表倒数第K个节点

    链表之删除双链表倒数第K个节点 题目: 链表之删除双链表倒数第K个节点   思路: 之前写过 http://blog.csdn.net/u011068702/article/details/50280 ...

  3. Linux内核链表之共享双链表

    说明 共享双链表意义在于,可以用一套函数维护不同数据类型的双链表 准备 定义双链表 #include <iostream> #include <string>using nam ...

  4. 链表之单、双链表反序

    给定一个单链表,然后对它反序. ListNode类 public class ListNode {int val;ListNode next;ListNode(int x){val=x;next=nu ...

  5. (王道408考研数据结构)第二章线性表-第三节3:循环单链表和循环双链表

    文章目录 一:循环链表定义 二:循环单链表 三:循环双链表 一:循环链表定义 循环链表:规定好头尾结点的指向形成成环状 循环单链表:其尾节点的next指针由原本的空改为指向头结点 循环双链表:其尾节点 ...

  6. 单、双链表的循环链表(十五)

    1. 单链表的循环链表 <1>.单链表的循环链表特点 单链表只能向后操作,不能向前操作,如果从当前结点开始,无法访问该结点前面的结点. 如果最后一个结点的指针指向头节点,形成一个闭环,就可 ...

  7. leetcode142. 环形链表 II(暴力+双链表)

    一:题目 二:思路 1.双指针 快慢指针(快指针一次一个结点,慢指针一次两个结点) 2.如果有环的话,那么快慢指针肯定会相遇 3.那么相遇的地点一定在环中 因为如果没有环的话慢指针是永远追不到快指针的 ...

  8. Java数据结构和算法:数组、单链表、双链表

    1. 概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的 ...

  9. 数据结构之线性表----一文看懂顺序表、单链表、双链表、循环链表

    ​ 线性表是数据结构中比较基础的内容,不过也是入门的所需要客服的第一个难关.因为从这里开始,就需要我们动手编程,这就对很多同学的动手能力提出了挑战.不过这些都是我们需要克服的阵痛,学习新的知识总是痛苦 ...

  10. 数据结构一线性表 (顺序表、单链表、双链表)

    版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 文章目录 1.线性表及其逻辑结构 1.1 线性表的定义 1.2 线性表的抽象数据类型描述 2.线性表的顺序存 ...

最新文章

  1. Spring学习之Bean的配置
  2. QML工作笔记-PC端和Android端布局错位问题
  3. 用DD-WRT自建计费WiFi热点
  4. iozone测试文件系统IO性能
  5. mysql安装ecshop_ECSHOP安装流程
  6. 安卓otg识别ntfs_你知道手机的OTG功能吗?学会用之后再也不担心内存不够了!...
  7. html语言%3cspan%3e,比较好的网站HTML语言.doc
  8. 微震生命探测仪厂家——微震生命探测仪可以检查毒品
  9. mac 树莓派 kali linux系统,MacOS制作树莓派kali系统
  10. 棋牌游戏开发不可缺少的四大技术支持
  11. 它是三大历史文献之一,明明价值连城,却被当做一堆废纸
  12. VM虚拟机安装及应用
  13. 黑客登录界面科幻黑色主题网页模板表单验证代码
  14. 边缘计算概念以及应用
  15. 浪潮精彩亮相第十届中国云计算大会
  16. ZigBee无线通讯技术
  17. 【coolshell】开源中最好的Web开发的资源
  18. 计算机网络大作业——抓包和分析
  19. eclipse下载安装。新版4.5+
  20. siki学院_Unity初级案例_愤怒的小鸟_学习笔记3/3

热门文章

  1. 微型计算机控制技术中南大学,中南大学微型计算机控制技术试题及答案资料.doc...
  2. 电脑w ndoWs语言权限通知,如何在 Wndows XP 中安装和配置语音识别
  3. 工作面试经历(TP-LINK 腾讯 天威视讯。。。)
  4. 信息安全行业入门与各类技术简介
  5. JS青蛙吃害虫小游戏
  6. 【报告分享】如何角逐存量车市-易车研究院(附下载)
  7. 池州学院计算机设计大赛,池州学院学生作品获全国性大赛纪录片一等奖
  8. New Concept book two word 带音标
  9. python整形_【python公开课|关于Python的整型,你都知道多少呢】- 环球网校
  10. python中不同进制的整数之间可以直接运算吗_【python公开课|要想真的做好python,那么学会python整数的不同进制很重要】- 环球网校...