双向循环链表(创建·插入·删除·遍历)

双向循环链表的创建、查找、插入、删除和遍历等操作 双向循环链表的创建、查找、插入、删除和遍历等操作 #ifndef __DLINKLIST_H__ #define __DLINKLIST_H__ #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct double_link_node { datatype data; st... 阅读详情

author:chen ming dong

#include<stdio.h>
#include<stdlib.h>
typedef struct list
{
    int a;
    struct list *next;
    struct list *prior;
}str;
int n;
str * creat(str *head)
{
    str *p,*pt;
    printf("要输入几个数据?\t");
    scanf("%d",&n);
    int m=n;
    printf("\n请输入\n"); 
    scanf("%d",&head->a);
    p=pt=head;
    while(m>1)
    {
        m--;
        p=(str *)malloc(sizeof(str));
        scanf("%d",&p->a);
        p->prior=pt;
        pt->next=p;
        pt=p;
    }
    head->prior=p;
    p->next=head;
    return head;
 } 
//遍历 
void gothrough(str *head) 
{
    str *p;
    p=head;
    printf("正向遍历\n");
    int m=n;
    while(m)
    {
        m--;
        printf("%-3d",p->a);
        p=p->next;
    }
    printf("\n反向遍历\n");
    m=n;
    while(m)
    {
        m--;
        p=p->prior;
        printf("%-3d",p->a);
    }
 }
//删除节点,不是删除数据 
void deletelist(str *head)
{
    printf("你要删除哪个节点?\t");
    int node;
    scanf("%d",&node); 

    str *front,*behind;
    front=behind=head;
    behind=behind->next;
    int m=n;
    if(node>2)
    while(node>2)
    {
        behind=behind->next;
        front=front->next;
        node--;
    }
    if(1==node)
    {
        head->a=behind->a;// 本来开始不是这样的,突然发现好像头结点不能删除,不然遍历会出问题 。所以换了一个方法 假删除头结点 
    }
    behind=behind->next;

    front->next=behind;
    behind->prior=front;
    head=front;
    n--;    
}
//插入节点,准确的说我只插入到了尾部,懒得很,今天还有很多事要做 插入中间其实也不难 
void insert(str *head)
{
    int a,node=n;
    str *p,*q,*str1;
    str1=(str *)malloc(sizeof(str));
    printf("\n你要插入的数\n");
    scanf("%d",&str1->a);

    p=head;
    while(node>1)
    {
        p=p->next;
        node--;
    }
    q=p->next;
    p->next=str1;
    str1->prior=p;
    q->prior=str1;
    str1->next=q;
    n++;
 } 
int main()
{
    str *head;
    int m;
    head=(str *)malloc(sizeof(str));// 重点**为他分配空间是必须的(1.其他函数没有对她进行分配空间  2.就算其他空间分配了空间也只能在那个函数中有效,我们要的是全局有效) 
    head=creat(head);
    gothrough(head);
    while(1)
    {
        printf("\n1.添加数据\t2.删除数据\t3.正反遍历\n");
        scanf("%d",&m);
        if(1==m)
        {
            insert(head);
         } 
         if(2==m)
         {
            deletelist(head);
         }
         if(3==m)
         {
            gothrough(head);
         }
    }
 } 

代码刚写的,希望有大牛们给点意见或建议

手把手教你用UC3842搭建12V/5A反激电源(附PSIM仿真文件) 本文详细介绍了基于UC3842的12V/5A反激电源设计与PSIM仿真实践。从UC3842芯片选型、高频变压器计算到PSIM仿真模型搭建,提供完整的开关电源设计流程。特别包含PCB布局要点和实测优化建议,帮助工程师快速掌握反激电源开发技巧。 阅读详情

相关推荐

STM32移植u8g2库(HAL库)(硬件SPI)(sh1106_128x64)

STM32移植u8g2库(HAL库)(硬件SPI)(sh1106_128x64) MCU型号为STM32F103RCT6,OLED屏为中景园电子1.3寸屏,驱动芯片为sh1106,分辨率为128x64,MDK版本为V5.34。

Master_0_的博客 6270

双向循环链表的创建,删除,插入,摧毁等操作(超详细)…… 〃•ω‹〃 (⌯꒪꒫꒪)੭

【代码】双向循环链表的创建,删除,插入,摧毁等操作(超详细)…… 〃•ω‹〃 (⌯꒪꒫꒪)੭。

2302_79862386的博客 1383

零成本接入Gemini Pro:GCP+NewAPI+OpenCode全栈方案

AI编程助手在现代开发流程中扮演着越来越重要的角色,其核心原理是通过大语言模型理解开发者意图并生成代码。以Gemini Pro为代表的顶级模型虽然能力出众,但成本控制和接入复杂度成为主要痛点。通过Google Cloud Platform的免费额度与开源工具链组合,开发者可以构建零成本的AI辅助开发环境。该方案采用Vertex AI作为基础模型服务,通过New API实现协议转换,最终与OpenCode终端工具深度集成。这种架构特别适合需要长期稳定使用AI编程助手的开发者,既能享受Gemini Pro的百万

weixin_29051245的博客 428

循环双链表算法库构建

循环双链表算法库构建

qq_57484399的博客 518

Cisco Firepower FMCv修改管理Ip方法

Cisco Firepower FMCv修改管理Ip方法

funnycoffee123的博客 1091

Hive SQL零基础到精通:100道练习题+答案,SQL能力快速提升

我将以我15年架构与开发的经验,带领大家从零基础到精通,通过精心设计的100道练习题及其详解,系统地、深度地掌握Hive SQL的核心精髓。它可以将结构化的数据文件映射为一张数据库表,并提供了一套类SQL的查询语言——HiveQL(简称HQL),允许熟悉SQL的用户直接查询存储在HDFS上的海量数据。它将Job描绘为DAG(有向无环图),允许更灵活的任务编排,避免不必要的中间落盘,可以复用容器,从而大幅降低延迟。希望你以此文为起点,在广阔的大数据世界里继续遨游,成为一名真正的数据高手!

架构师的AI之路,分享AI应用开发架构的学习与实践。 797

循环双链表的基本操作实现

用头插法建立带头结点的循环双链表并对已创建的双链表实现插入、删除、查找等基本操作。

YanMeiHe的博客 1442

ROS2学习笔记(二)-- 多机通讯原理简介及配置方法

简单介绍ROS2多机通信原理以及配置注意事项

aibingjin的博客 1万+

双向循环列表的插入和删除

DuLNode* InitInsertNode(DuLinkedList &L, ElemType x) { DuLNode *p = new DuLNode; p->element = x; return p; } void InsertList(DuLinkedList &L, ElemType x) /* 在 L 的第一个元素前插入新元素 x */ { DuLNode *p = InitInsertNode(L, x); //犯过的错误,调用L不是&L p-&.

awe19的博客 1886

YOLOv11改进 | Neck篇 | 轻量化跨尺度跨通道融合颈部CCFM助力YOLOv11有效涨点

到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的平均质量分98分,后期我会根据各种最新的前沿顶会进行论文复现,也会对一些老的改进机制进行补充,目前本专栏免费阅读(暂时,大家尽早关注不迷路~)如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~YOLOv11有效涨点专栏——本专栏持续复习各种顶会内容——科研必备​ycb。

Snu77的博客 8079

Echarts - 去掉图表上的横线和竖线

效果图 默认效果: 变为如下图所示效果: 实现方法 官方配置文档:https://echarts.apache.org/zh/option.html#radar.splitLine 在 xAxis yAxis 配置中分别加入以下代码: splitLine: { show:false }

🏆 前端领域优质创作者 1万+

双向带头循环链表

前言:链表的建立建立一个结点链表的初始化链表的尾插 链表的打印链表的头插链表的头删链表的尾删双向带头循环链表应该是链表中非常方便的一种,可以很容易的在任意位置上进行插入和删除

Obto_的博客 181

Python爬虫实战:美团商家数据采集系统

本文将详细介绍如何使用Python最新技术栈构建高效的美团商家信息采集系统。内容涵盖异步爬虫、反爬对抗、数据存储、可视化分析等完整流程,提供可落地的代码方案和工程实践。

2201_76125261的博客 2658

【数据结构算法】③、双向链表和双向循环链表的实现、双向链表的创建-遍历-插入-删除-删除指定元素-查询指定元素、双向循环链表的创建-遍历-插入删除

【数据结构算法】③、双向链表和双向循环链表的实现、双向链表的创建-遍历-插入-删除-删除指定元素-查询指定元素、双向循环链表的创建-遍历-插入删除

慢慢来就很快。 2055

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

数据结构(c实现)---- 双向循环链表的创建、插入、删除、遍历等基本操作

数据结构(c实现)---- 双向循环链表的创建、插入、删除、遍历等基本操作 双向循环链表 双向循环链表和单链表要多一个前驱指针。 文章目录双向循环链表创建链表的长度节点的插入节点的删除清空链表遍历链表全部代码 创建

weixin_43870670的博客 2194

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C 双向循环链表:创建、插入、遍历、求长、查找、删除、排序、销毁

C 双向链表:创建、插入、遍历、求长、查找、删除、排序、销毁 一、双向链表存在的意义 数组这样的结构提供了连续内存的访问和使用,链表是对内存零碎空间的有效组织和使用,双向循环链表增大了访问的自由度。 ...

Bryan_QAQ的博客 3234

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【双向循环链表_C语言】创建头结点和新结点、插入新结点、删除结点、遍历链表

双向循环链表的每个结点都有两个指针:一个指向前一个结点,另一个指向后一个结点。链表的尾结点的下一个指针指向头结点,而头结点的前一个指针指向尾结点,从而形成一个闭环。创建一个结构体用于定义结点类型,结构体成员包括数据域、直接前驱、直接后继。//起别名,增加可移植性typedef struct DoubleCircList//结点的结构体类型//结点的后继指针next//结点的前驱指针prev。

2301_80481107的博客 588

【数据结构】——双向循环链表,使用Python创建一个简单的双向循环链表(详解)

双向循环链表 每个结点有两个指针域,分别指向前驱结点和后继结点,尾结点的后继指针指向头结点,头结点的前驱指针指向尾结点。整体形成一个双向连通的环。 创建一个结点类: class Node(object): """结点类""" def __init__(self, data): self.data = data self.pre = ...

她的坏机器人 677

如何实现双向循环链表

用C语言实现双向带头循环链表,通过概念的渗透和代码的逐一分析进行讲解。

kevin_blog 1687

线性表的链式存储结构-双向链表及双向循环链表

目录1. 双向链表1.1 双向链表创建1.2 双向链表插入结点1.3 双向链表删除指定结点1.4 双向链表删除指定元素1.5 双向链表查找元素位置1.6 双向链表更新结点数据1.7 双向链表遍历2. 双向循环链表2.1 双向循环链表创建2.2 双向循环链表插入结点2.3 双向循环链表删除结点2.4 双向循环链表遍历 上一边文章我们介绍了单链表及循环链表,现在我们了解一下双向链表及双向循环链表。 1...

郭永明的技术专栏 3919

六、数据结构——双向循环链表在数据结构中的基本操作详解:创建、插入(头插法、尾插法、任意点插法)、删除(头删法、尾删法、任意位置删法)、查询(按值查下标、按下标查值)、遍历链表和清空链表

双向循环链表是一种链表数据结构,它的节点包含两个指针:一个指向前一个节点,一个指向后一个节点。与单向链表不同的是,双向循环链表的最后一个节点的后继指针指向第一个节点,而第一个节点的前驱指针指向最后一个节点,形成一个循环的闭环。

qq_57737603的博客 176

(C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作

双向循环链表是基于双向链表的基础上实现的,和双向链表的操作差不多,唯一的区别就是它是个循环的链表,通过每个节点的两个指针把它们扣在一起组成一个环状。所以呢,每个节点都有前驱节点和后继节点(包括头节点和尾节点)这是和双向链表不同的地方。我们看下双向循环链表的示意图(我在网上找了张图片,自己画的实在难看,有时间真的要去学下怎么画图了,然后可以写出更好的博客): 在程序的编写方面呢,双向循环链表有

菜鸟学C/C++ 1万+

【C 数据结构】循环链表

在init重创建的结点next指向空,而在主函数调用创建之后手动 将head头结点的next指针指向自身。找到需要删除的结点,将其前一个结点的next指针直接指向删除结点的下一个结点。问题就是获取到链表的节点数同时也需要完成一次遍历才可以达成目标。在原有的双向链表的基础上,将尾部结点和头部结点进行互相连接。循环链表的尾指针指向的是链表的开头。

普罗米修斯的博客 1000

4、数据结构与算法 - 双向链表和双向循环链表

大纲 双向链表(增删改查) 双向循环链表(增删) 一、双向链表 双向链表的结点有连个指针域,一个(prior)指向钱一个结点,一个(next)指向后一个结点。 ​​ #include <stdio.h> #include "string.h" #include "ctype.h" #include "stdlib.h" #include "math.h" #...

shengdaVolleyball的博客 648

数据结构——双向循环链表(C语言)

1.双向循环链表的创建 2.双向循环链表的插入 3.双向循环链表的删除 4.遍历双向循环链表 #include<stdio.h> #include<stdlib.h> #define MAXSIZE 10010 #define ElemType int typedef struct DuLNode{ ElemType data; struct DuLNode *prior,*next; }DuLNode,*DuLinkList; //创建双向循环链表 DuLin.

Melody_my的博客 346

双向循环链表的实现与基本运算

目录双向循环链表引入双向链表结点的描述双向循环链表的基本运算 双向循环链表引入 在单链表L中,查找ai的后继next(L,ai),耗时仅为o(1),因为取ai之后的后继指针即可。但查找ai的直接前驱prior(L,ai),则需要从链表的头指针开始,找到结点ai前一节点即是。故运算prior(L,ai),依赖表长n,耗时为o(n)。另外,若链表中有一指针值被破坏,则整个链表就会脱节。这是单链表的不足,为此引入双链表。如下图: 双向链表结点的描述 即双链表的结点包含三个部分,两个指针域,一个数据域。

big_C的博客 910
上一篇: JAVA隐式转换和方法重写和static关键字
下一篇: 双向循环列表(以linux内核链表为模板)
帅东
博客等级 码龄11年 676粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值