数据结构四双向链表

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。而之前的单链表为单向链表,双向链表也就是在单链表的结点中增加一个指向其前驱的pre指针

        如图

        

        

        这里介绍双向链表的常用操作:

               l 创建双向链表

               l 销毁双向链表

               l 清空双向链表

               l 获取表长度

               l 把node插入pos位置

               l 获取pos位置的元素

               l 删除pos位置的元素

               l 删除表中与node相同的元素(删除第一个匹配成功的)

               l 重置游标

               l 返回游标所指向的结点

               l 游标后移

               l 游标前移

 

         代码总分为三个文件:

                     DLinkList.h : 放置功能函数的声明,以及表的声明,表结点的定义 

                     DLinkList.c : 放置功能函数的定义,以及表的定义

                     Main.c    : 主函数,使用功能函数完成各种需求,一般用作测试

        整体结构图为:

 

        

        

              这里详细说下插入操作和删除操作:

 

              插入操作

                        如图

 

                                        

             

              插入元素方法:

                       判断表和插入位置是否合法

                       由表头开始通过next域移动pos次后,当前元素的next域为要插入的位置

                       Current的next域指向node

                       Node的next域指向next

                       判断是否为尾插,如果不是的话next的pre域指向node

                       判断是否为头插,如果是的话node的pre域指向NULL 

                      如果之前表为空表,则游标指向插入的结点

                      表长度加1

  

              删除操作

                        如图

 

                 

              删除元素方法:

                     判断表和插入位置是否合法

                     由表头开始通过next域移动pos次后,当前元素的next指向的元素为要删除的元素

                     把current的next域指向next

                     判断是否为尾插,如果不是的话,next的pre指针指向current

                     如果不是尾插且是头插的话,next的pre指针指向NULL

                     如果删除的结点正好游标也指向它,则游标后移

                     表长度减1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

smtplib python教程_Python使用poplib模块和smtplib模块收发电子邮件的教程

poplib模块接收邮件python的poplib模块是用来从pop3收取邮件的,也可以说它是处理邮件的第一步。POP3协议并不复杂,它也是采用的一问一答式的方式,你向服务器发送一个命令,服务器必然会回复一个信息。pop3命令码如下:命…

C#发送电子邮件 (异步) z

///验证电子邮件的正则表达式 string emailStr "^([\w-\.])((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]\.)))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; /// <summary> /// 异步发送电子邮件 /// </summary> /// <p…

Linux服务器的初步配置流程

开发网站的时候&#xff0c;常常需要自己配置Linux服务器。 本文记录配置Linux服务器的初步流程&#xff0c;也就是系统安装完成后&#xff0c;下一步要做的事情。这主要是我自己的总结和备忘&#xff0c;如果有遗漏&#xff0c;欢迎大家补充。 下面的操作针对Debian/Ubuntu系统…

C语言趣味程序百例精解

1.绘制余弦曲线 在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线 *问题分析与算法设计 如果在程序中使用数组&#xff0c;这个问题十分简单。但若规定不能使用数组&#xff0c;问题就变得不容易了。 关键在于余弦曲线在0~360度的区间内&#xff0c;一行中要显示两个点&#xf…

cocos2dx 圆盘抽奖_cocoscreator之微信小游戏的抽奖转盘

许多小游戏里面都有涉及到抽奖环节&#xff0c;所以就可能会用到抽奖转盘的制作&#xff0c;今天分享一个自己左转盘的小小过程。1、准备材料过程不多说&#xff0c;拼完界面之后大概是这样的&#xff1a;2、给界面绑定脚本&#xff0c;在脚本的properties里面绑定转盘节点&…

测试报告分析

测试分析报告 1&#xff0e;引言 1 1.1编写目的 1 1.2项目背景 1 1.3参考资料 2 2&#xff0e;测试计划执行情况 2 2.1测试项目 2 2.2测试机构和人员 3 2.3测试结果 3 3&#xff0e;软件需求测试结论 7 4&#xff0e;评价 7 4.1软件能力 7 4.2缺陷和限制 7 4.3建议 7 4.4测试结…

不要学习代码,要学会思考(转)

英文原文&#xff1a;Dont learn to code, learn to think 译/赖信涛 这是一个人人都在学习编程的时代&#xff1a;Code.org请了比尔盖茨&#xff0c;马克扎克伯格和克里斯波什等这些名人&#xff0c;来告诉你&#xff0c;每个人都可以编程&#xff1b;CoderDojo’s在各个国家悄…

python读取多个sheet文件_PythonPandas excel文件如何一次读取所有工作表,并再次写入多个工作表?,pythonpandasexcel,一次性,全部,sheet,重新...

关于如何一次性读取全部sheet&#xff0c;可看我之前写的一篇博客&#xff1b;本文重点讲述如何对同一个excel文件一次性写入多个sheet数据代码示例&#xff1a;import pandas as pdwriter pd.ExcelWriter("新数据.xlsx")sheet1Data [] # 这个为要向Sheet1写入的数…

stdin,stdout,stderr

我们在写C程序时经常遇到printf&#xff08;&#xff09;&#xff0c;fprintf&#xff08;&#xff09;&#xff0c;perror&#xff08;&#xff09;&#xff0c;这些东西到底有什么作用。说到这不得不提及stdin&#xff0c;stdout&#xff0c;stderr。想想&#xff0c;我们在用…

Hadoop的改进实验(中文分词词频统计及英文词频统计)(4/4)

声明&#xff1a; 1&#xff09;本文由我bitpeach原创撰写&#xff0c;转载时请注明出处&#xff0c;侵权必究。 2&#xff09;本小实验工作环境为Windows系统下的百度云&#xff08;联网&#xff09;&#xff0c;和Ubuntu系统的hadoop1-2-1&#xff08;自己提前配好&#xff0…

简单的日历小程序

一个可以查询1900年之后的所有年份当月月历。 import java.util.Scanner; public class Calendar {//输入年月输出当月日历public static void main(String[] args) {Scanner input new Scanner(System.in);System.out.println("请输入年份");int year input.nextI…

python龟图_python学习turtle(龟图标状态)

2019独角兽企业重金招聘Python工程师标准>>>记录学习turtle.hideturtle()turtle.ht()&#xff0c;隐藏龟图标。turtle.showturtle()turtle.st()&#xff0c;显示龟图标。turtle.isvisible()&#xff0c;龟是否显示。显示返回true&#xff0c;否则返回false。turtle.sh…

spring mvc相关问题

1&#xff1a; 基于注解的SpringMVC简单介绍 2&#xff1a; spring组件扫描<context:component-scan/>使用详解 3&#xff1a; springMvc 注解配置例子

C# - 创建List属性的简单方法

不用担心List没有创建问题。 private ObservableCollection<EquipmentItem> _optionalCollection;public ObservableCollection<EquipmentItem> OptionalCollection{get{if (this._optionalCollection null){this._optionalCollection new ObservableCollection&…

旋转函数_【视频课】:一次函数拓展应用(图象的平移、旋转、轴对称及5种解题方法)...

请点击上方“出彩数学”可以免费订阅哦停课不停学★ 特别关注&#xff1a;今日头条、西瓜视频——初三中考解题方法与技巧、初一、初二的同步讲解视频&#xff0c;正在陆续上传&#xff0c;请关注今天头条或西瓜视频(下载APP&#xff0c;搜索“出彩数学”&#xff0c;关注即可…

c语言中,关于延迟函数的理解

对于延迟&#xff0c;有些c基础的人都能够做到用for或while来实现 例如&#xff1a; #include <stdio.h>int main() {int i, j, k;for (i 1; i < 1000; i){for (j 1; j < 1000; j){for (k 1; k < 1000; k){}}}printf("hello\n");return 0; }1234…

static方法不能直接访问类内的非static变量和不能调用this,super语句分析

大家都知道在static方法中&#xff0c;不能访问类内非static成员变量和方法。可是原因是什么呢&#xff1f; 这首先要从static方法的特性说起。static方法&#xff0c;即类的静态成员经常被称为“成员变量”&#xff08;class members&#xff09;&#xff0c;对于静态成员变量…

C++ Qt 访问权限总结

总结&#xff1a;C的访问修饰符的作用是以类为单位&#xff0c;而不是以对象为单位。 通俗的讲&#xff0c;同类的对象间可以“互相访问”对方的数据成员&#xff0c;只不过访问途径不是直接访问. 步骤是&#xff1a;通过一个对象调用其public成员函数&#xff0c;此成员函数可…

火山去水印链接_在线批量去水印下载快手图集视频、抖音、火山等平台方法技巧!...

不管是做自媒体还是做电商或是工作素材采集&#xff0c;都离不开视频&#xff0c;视频比文字更好展示出产品、细节内容&#xff0c;就好比我们经常看的抖音、快手、火山、皮皮虾之类的短视频里面就有很多优秀的素材&#xff0c;相信有采集过的朋友都会遇到平台水印这个问题吧&a…

输出素数

素数是指仅能被1和她自身整除的整数。&#xff08;1 不是素数&#xff09; 程序设计时 i 可以从2开始&#xff0c;到该整数的 1/2为止&#xff0c;用 i 一次去除需要判断的整数&#xff0c;只要存在可以整除该数的情况&#xff0c;即可以确定要判断的整数不是素数&#xff0c;…