链表(单链表,双链表)
用数组模拟链表
单链表
邻接表(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;
}
链表(单链表,双链表)相关推荐
- 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表
循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...
- 链表之删除双链表倒数第K个节点
链表之删除双链表倒数第K个节点 题目: 链表之删除双链表倒数第K个节点 思路: 之前写过 http://blog.csdn.net/u011068702/article/details/50280 ...
- Linux内核链表之共享双链表
说明 共享双链表意义在于,可以用一套函数维护不同数据类型的双链表 准备 定义双链表 #include <iostream> #include <string>using nam ...
- 链表之单、双链表反序
给定一个单链表,然后对它反序. ListNode类 public class ListNode {int val;ListNode next;ListNode(int x){val=x;next=nu ...
- (王道408考研数据结构)第二章线性表-第三节3:循环单链表和循环双链表
文章目录 一:循环链表定义 二:循环单链表 三:循环双链表 一:循环链表定义 循环链表:规定好头尾结点的指向形成成环状 循环单链表:其尾节点的next指针由原本的空改为指向头结点 循环双链表:其尾节点 ...
- 单、双链表的循环链表(十五)
1. 单链表的循环链表 <1>.单链表的循环链表特点 单链表只能向后操作,不能向前操作,如果从当前结点开始,无法访问该结点前面的结点. 如果最后一个结点的指针指向头节点,形成一个闭环,就可 ...
- leetcode142. 环形链表 II(暴力+双链表)
一:题目 二:思路 1.双指针 快慢指针(快指针一次一个结点,慢指针一次两个结点) 2.如果有环的话,那么快慢指针肯定会相遇 3.那么相遇的地点一定在环中 因为如果没有环的话慢指针是永远追不到快指针的 ...
- Java数据结构和算法:数组、单链表、双链表
1. 概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的 ...
- 数据结构之线性表----一文看懂顺序表、单链表、双链表、循环链表
线性表是数据结构中比较基础的内容,不过也是入门的所需要客服的第一个难关.因为从这里开始,就需要我们动手编程,这就对很多同学的动手能力提出了挑战.不过这些都是我们需要克服的阵痛,学习新的知识总是痛苦 ...
- 数据结构一线性表 (顺序表、单链表、双链表)
版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 文章目录 1.线性表及其逻辑结构 1.1 线性表的定义 1.2 线性表的抽象数据类型描述 2.线性表的顺序存 ...
最新文章
- Spring学习之Bean的配置
- QML工作笔记-PC端和Android端布局错位问题
- 用DD-WRT自建计费WiFi热点
- iozone测试文件系统IO性能
- mysql安装ecshop_ECSHOP安装流程
- 安卓otg识别ntfs_你知道手机的OTG功能吗?学会用之后再也不担心内存不够了!...
- html语言%3cspan%3e,比较好的网站HTML语言.doc
- 微震生命探测仪厂家——微震生命探测仪可以检查毒品
- mac 树莓派 kali linux系统,MacOS制作树莓派kali系统
- 棋牌游戏开发不可缺少的四大技术支持
- 它是三大历史文献之一,明明价值连城,却被当做一堆废纸
- VM虚拟机安装及应用
- 黑客登录界面科幻黑色主题网页模板表单验证代码
- 边缘计算概念以及应用
- 浪潮精彩亮相第十届中国云计算大会
- ZigBee无线通讯技术
- 【coolshell】开源中最好的Web开发的资源
- 计算机网络大作业——抓包和分析
- eclipse下载安装。新版4.5+
- siki学院_Unity初级案例_愤怒的小鸟_学习笔记3/3
热门文章
- 微型计算机控制技术中南大学,中南大学微型计算机控制技术试题及答案资料.doc...
- 电脑w ndoWs语言权限通知,如何在 Wndows XP 中安装和配置语音识别
- 工作面试经历(TP-LINK 腾讯 天威视讯。。。)
- 信息安全行业入门与各类技术简介
- JS青蛙吃害虫小游戏
- 【报告分享】如何角逐存量车市-易车研究院(附下载)
- 池州学院计算机设计大赛,池州学院学生作品获全国性大赛纪录片一等奖
- New Concept book two word 带音标
- python整形_【python公开课|关于Python的整型,你都知道多少呢】- 环球网校
- python中不同进制的整数之间可以直接运算吗_【python公开课|要想真的做好python,那么学会python整数的不同进制很重要】- 环球网校...