线性表-双向链表

线性表详解(静态链表、单链表、双向链表、循环链表) 目录申明 申明   本文章属于原创,其中参考了程杰老师《大话数据结构》行文结构和内容,侵删。 阅读详情

双向链表

结点结构:

typedef struct DualNode
{
    ElemType data;
    struct DualNode *prior;  //前驱结点
    struct DualNode *next;   //后继结点
}DualNode, *DuLinkList;

插入操作:

请添加图片描述

s->next = p;
s->prior = p->prior;
p->prior->next = s;
p->priot = s;

删除操作:

请添加图片描述

p->prior->next = p->next;
p->next->prior = p->prior;
free(p);

题目实践:

要求实现用户输入一个数使得26个字母的排列发生变化,例如

输入:3
输出:DEFGHIJKLMNOPQRSTUVWXYZABC
输入:-3
输出:XYZABCDEFGHIJKLMNOPQRSTUVW

代码:

#include<stdio.h>
#include<stdlib.h>

#define OK  1
#define ERROR 0

typedef char ElemType;
typedef int Status;

typedef struct DualNode
{
    ElemType data;
    struct DualNode *prior;
    struct DualNode *next;
}DualNode, *DuLinkList;

Status InitList(DuLinkList *L)
{
    DualNode *p,*q;
    int i;
    *L = (DuLinkList)malloc(sizeof(DualNode));
    if(!(*L))
    {
        return ERROR;
    }
    (*L)->next = (*L)->prior = NULL;
    p = (*L);
    for(i=0;i<26;i++)
    {
        q = (DualNode *)malloc(sizeof(DualNode));
        if(!q)
        {
            return ERROR;
        }
        q->data = 'A'+i;
        q->prior = p;
        q->next = p->next;
        p->next = q;
        p = q;
    }
    p->next = (*L)->next;
    (*L)->next->prior = p;
    
    return OK;
    
}
void Caesar(DuLinkList *L,int i)
{
    if(i>0)
    {
        do
        {
            (*L) = (*L)->next;
        }while(--i);
    }
    if(i<0)
    {
    	(*L) = (*L)->next;  //注意此时*L不在环内,要先把它加入环中
        do
        {
            (*L) = (*L)->prior;
    	}while(i++);
    }
}
int main(){
    DuLinkList L;
    int i,n;
    InitList(&L);
    printf("请输入一个整数:");
    scanf("%d",&n);
//    printf("\n");
    Caesar(&L,n);
    for(i=0;i<26;i++){
        L = L->next;
        printf("%c",L->data);
    }
    return 0;
}

线性表(数组、单链表、静态链表、循环链表、双向链表) 线性表的定义 线性表(List):零个或多个数据元素的有限序列。 有几个地方需要强调: 首先它是一个序列,也就是说元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。 然后线性表强调的是有限的。 最后线性表中的数据元素必须是相同类型。 如果用数据语言来定义,可如下(配合下图理解): 数学语言定义: 若将线性表记为(a1... 阅读详情

相关推荐

数据结构知识点总结04-(第二章.线性表)-双向链表定义、循环单链表、、循环双向链表、静态链表、顺序表与链表的比较

数据结构知识点总结-线性表(3)-双向链表定义、循环单链表、、循环双向链表、静态链表、顺序表与链表的比较

随风浪仔的专栏 758

线性表的双向链表实现

在我上一篇博客里面给出了线性表的单向链表实现,这一篇将给出线性表的双向链表的实现,在这之前,我们先来比较一下线性表的顺序结构和非顺序结构的优缺点,以及非顺序结构中单向链表和双向链表的优缺点。 ...

全村最靓的仔 395

bert-ini:一种基于bert的实体对齐交互模型

本次分享一项来自IJCAI-20的实体对齐工作,该工作提出了一种不同于以往的采用图结构信息进行实体对齐的技术方案,该方案取得了当时的最好效果;不仅如此,模型本身的对齐效率在该项工作中也被考虑,实际工作中非常具备借鉴意义。

qq_33331424的博客 3150

双向链表实现线性表

### 数据结构必知 - 数据结构的逻辑结构分为集合结构、线性结构、树形结构、图形结构。 - 数据结构的存储结构分为顺序结构、链式结构、索引结构、散列结构。 - 常见的八大数据结构有数组(Array)、栈(Stack)、队列(Queue)、链表(Linked List)、树(Tree)、图(Graph)、散列表(Hash)。

十二翼堕落天使 810

【操作系统】 Operation System 第二章:操作系统基础操作

2.1 操作系统的启动 (1)CPU, I/O, 内存通过总线连接。 (2)DISK:存放OS; BIOS:基本I/O处理系统( basic I/O system); Bootloader: 加载OS到内存中。 (3)当电脑通电时,段寄存器CS和指令寄存器IP能够确定一个内存地址,例如CS:IP = 0xf000:fff0. (4)POST(加电自检),寻找显卡和执行BIOS。(显示器,键盘…是否...

iwanderu的博客 1万+

数字后端零基础入门系列 | Innovus零基础LAB学习Day7

数字后端零基础入门系列 | Innovus零基础LAB学习Day7

weixin_37584728的博客 2269

双向链表,顺序表和链表的比较,线性表的应用,链表的合并,多项式的运算

线性表的应用 双向链表 在单链表的每个结点里再增加一个指向其直接前驱的指针域prior,这样链表中就形成了有两个方向不同的链,故称为双向链表 双向链表结点结构: 双向链表的结构可定义如下: typedef struct DuLNode{ ElemType data; struct DuLnode *prior , *next; }DuLNode,*DuLinkList; 图示: ...

diviner_s的博客 1179

滑模控制算法——基本原理(附MATLAB程序)

选择一个滑模面和是设计参数。是滑模面函数,通常我们希望系统状态在的面上滑动。我们以一个简单的二阶系统作为示例,其状态空间方程为:是系统矩阵是输入矩阵是输出矩阵假设我们的系统如下:滑模控制算法的核心在于设计合适的滑模面和控制律,并分析系统在滑模面上的稳定性。通过上述公式和步骤,可以有效地设计滑模控制器,以处理具有非线性和不确定性的动态系统。总的来说,滑模控制算法因其鲁棒性和灵活性在处理复杂控制问题中表现出色,但在实际应用中需要精心设计以克服抖振现象和其他潜在问题。BuxuABDC。

qq_35623594的博客 2万+

用双向链表解决线性表的编程问题

用双向链表解决线性表的编程问题: 双向链表:在结点中设连个引用域,一个保存直接前驱节点的地址,叫prev,一个直接后继结点的地址,叫next。 双向链表相对单向链表只是多了一个字段prev。  代码实现: using System; namespace 用双向链表解决线性表的编程问题 { class Program { static void Main(...

387

在trae CN中使用conda环境(已解决)

Trae CN 是字节跳动于 2025 年 3 月 3 日发布的国内首个 AI 原生集成开发环境(AI IDE)123。

zwzscnds的博客 6935

CISP-PTE考前实操练习题

CISP-PTE考前学习练习题目,渗透测试功工程师

2301_79546223的博客 1996

线性表的链式存储——双向链表的实现

1,单链表另一个缺陷: 1,单向性: 1,只能从头结点开始高效访问链表中的数据元素; 2,缺陷: 1,如果需要逆向访问(最先访问倒数第一个节点)单链表中的数据元素将极其低效; 2,插入时效率很高,逆序访问时效率很低: ...

weixin_30399797的博客 99

Could not find a package configuration file provided by “boost_signals“

gmapping/slam_gmapping/gmapping/CMakeLists.txt:14 (find_package)问题在14行,注释该行。,该语句的用以为告诉项目Boost库文件所在。

weixin_72050316的博客 1027

线性表:单链表、循环表、双向链表

线性表:数据元素之间是一对一的关系,即每个数据元素最多有一个直接前驱和一个直接后继。 特点: ① 同一性: 线性表由同类数据元素组成,每一个ai必须属于同一数据对象。 ② 有穷性: 线性表由有限个数据元素组成,表长度就是表中数据元素的个数。 ③ 有序性: 线性表中相邻数据元素之间存在着序偶关系<ai,ai+1>。 一、线性表的顺序储存: 相当于数组这样来理解吧,在内存里开辟的是连续的一...

weixin_43404836的博客 1124

RK3588开发笔记-Buildroot编译host-nodejs报错解决ModuleNotFoundError: No module named ‘_bz2‘

在RK3588的开发过程中,使用Buildroot进行系统的构建和编译是一个常见的选择。然而,在编译host-nodejs的过程中,有时会遇到报错信息提示。这个错误通常是由于Python环境中缺少相应的模块导致的。以下将记录我解决这个问题的过程。。在RK3588的开发过程中,使用Buildroot编译host-nodejs时遇到的错误,通常是由于缺少相应的Python模块导致的。通过配置buildroot pythong bzip2开发库并重新编译,可以解决这个问题。

flypig has a dream! 898

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

线性表之双向链表

双向链表

mr_yuyou的博客 356

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数据结构与算法--双向链表及线性表应用

一、双向链表 1) 双向链表: 在单链表的每个结点里在增加一个指向其直接前驱的指针域 2) 双向循环链表: 让头结点的前驱指针指向链表的最后一个结点,让最后一个结点的后继指针指向头结点 3) 双向链表结构的对称性(设指针p指向某一结点): p->front->next = p = p->next->front; 4) 双向链表的结点类型定义: typed...

SONG_YIH的博客 542

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

双向链表结构实现线性表

结合之前的代码和学习,我又写了双向链表实现线性表。双向链表在找前驱后继有比较好的优势。操作命名是严格按照严蔚敏版数据结构写的,大家复习时可以参考一下。 1.测试代码(main.cpp) #include <iostream> #include "dulink_list.h" using namespace std; int main() { dulink_list L; while(1){ int flag = menu(); if(fla

云杉木屋 403

线性表之循环与双向链表 - part04

循环链表、双向链表、双向链表的操作、所有链表的时间效率比较、顺序表和链表的比较、线性表的应用、案例分析与实现。

mornin9的博客 425

java 双向链表_Java数据结构之线性表

这篇文章我们来说说Java里一个很重要的数据结构——线性表,还是这张图,线性表对应着下图里的List。​红框里的内容就是线性表的大家族了,其中黄色部分是要重点了解的, 线性表里的元素是按线性排列的(这里的线性指逻辑上的) 线性表分为两大类,分别是顺序表和链表 :一、顺序表顺序表中的数据元素存储是连续的,内存划分的区域也是连续的。存储结构如下图:​我们的ArrayList底层是数组实现的,底层元素在...

weixin_39670267的博客 118

线性表:循环链表和双向链表

1.咱们已经学习完线性表的主体内容了,接下来是一些关于线性表的改进。我们发现我们遍历线性表时总是单向的(名字也是单链表),有的时候我们为了操作方便,想要直接访问当前访问到的结点的前面一个结点。这里说下,这个双向链表的尾结点的下一个结点是头结点,头结点的上一个结点是尾结点,构成循环。7.循环链表和双链表占用内存大,但是操作简单,算法也快些,属于是用空间换时间吧。2.循环链表多了一个尾指针,指向尾部结点,而尾部结点的next指向头部结点。4.双向链表,每个结点增加了一个prior指针,头指针和尾指针放在一起。

2402_87121144的博客 291

算法基础:数据结构(二):线性表、循环链表和双向链表

用一段地址连续的存储单元依次存储线性表的数据元素,构成顺序存储需要三个属性:地址计算方法: yFykN.png yFaBu.pngyFCqO.md.pngyFLdq.md.pngyY60A.pngyQHBd.md.pngyQBke.md.pn

2401_87878486的博客 1174

双向循环链表(线性表 栈 队列)

双向循环链表

weixin_55742319的博客 1364

大话数据-—线性表之循环/双向链表

线性表分为: 顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素。 链式存储结构:单链表、静态链表、循环链表、双向链表 一、循环链表合并 两个循环链表的尾指针分别是rearA,rearB A链表的头结点为rearA->next B链表的头结点为rearB->next,第一个结点为rearB->next->next 1、保存A链表的头结点 p 2、将本是指向A表头结点的A表的尾指

洞玄之境的博客 324

线性表(顺序表,线性链表,循环单链表,双向链表)

一. 线性表的基本概念: (一). 线性表的定义: 线性表是由n(n>=0)个相同类型的数据元素组成的有限序列。标记为: L=(a1,a2,...,ai,...,an) 线性表中的元素的个数n定义为线性表的长度,当n=0时为空表。 当n>0时,线性表的逻辑结构如下图所示: 逻辑特征: (1). 若至少含有一个元素,则只有唯一的一个起始元素; (2). 若至少含有一个...

So_cute_SJM的博客 1236

数据结构3_线性表_双向链表

数据结构3_线性表_3 总览: 线性表: 线性表是具有相同数据类型的n(n>=0)个数据元素的有序序列,其中n为表长,当n=0时线性表是一个空表。若用L命名线性表,其一般表示为: L=(a1,a2,a3,a4,∗∗∗,an) L = (a1,a2,a3,a4,***,an) L=(a1,a2,a3,a4,∗∗∗,an) a1为表头元素,an为表尾元素,除了an其他元素都有唯一的直接后继,除...

毛钱儿的博客 401
上一篇: 循环链表解决约瑟夫问题
下一篇: 栈的结构与基本操作
一匹小羊驼
博客等级 码龄6年 40粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值