首页 > 其他分享 >双向链表的实现

双向链表的实现

时间:2023-07-22 15:33:24浏览次数:32  
标签:结点 实现 List next 链表 int 双向 data DNode

// 带头节点的双链表

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

typedef struct DNode
{
    int data;
    struct DNode *prior;
    struct DNode *next;
}DNode;

// 初始化头结点

DNode *Init_DLinkList()
{
    DNode* L;
    L=(DNode*)malloc(sizeof(DNode));
    L->data=0;
    L->prior=NULL;       //头置零
    L->next=NULL;       //尾置零,暂时还没后续结点
}

//打印列表的函数

void Print_List(DNode* p)
{
    DNode* node = p->next;
    while (node)
    {
        printf("%d ",node->data);
        node=node->next;
    }
    
}

//双链表的建立
void Bulid_DLinkList(DNode* p)
{
    int data;
    scanf("%d",&data);//输入要存储的数据
    DNode *s,*r;
    r=p;
    while (data!=999)
    {
        s=(DNode*)malloc(sizeof(DNode));//开辟一个新的结点
        s->data=data;
        s->next=NULL;//(NULL)
        s->prior=p;
        p->next=s;
        p=s;
        scanf("%d",&data);
    }
}

//双链表的插入
int Insert_List(DNode* p,int i,int data)//在双链表的第i个元素插入data
{
    DNode* s=(DNode*)malloc(sizeof(DNode));//待插入的结点
    DNode* q;
    q=p;//先将头结点的地址保存。
    for(int j=0;((j<i-1)&&(q->next!=NULL));j++)//循环找到第i-1个结点
    {
        q=q->next;

    }
    if((i==0)) //不满足条件
    {
        return 0;
    }
    else
    {
        s->data=data;
        s->next=q->next;//将s的后继指向原来的i节点
        q->next=s;
        s->prior=q;
        s=q;
    }
}


//双链表的删除

void Delete_List(DNode* p,int i)//将第i个结点删除
{
    DNode* q;
    q=p;
    for(int j=0;j<i-1;j++)
    {
        q=q->next;
    }
    DNode* s;//零时保存要删除的结点
    s=q->next;
    q->next=s->next;
    s->next->prior=q;
    free(s);
    
}

int main()
{
    DNode* L=Init_DLinkList();
    Bulid_DLinkList(L);
    Insert_List(L,1,50);
    Delete_List(L,3);
    Print_List(L);
    return 0;

}

标签:结点,实现,List,next,链表,int,双向,data,DNode
From: https://www.cnblogs.com/lzzcforever/p/17573449.html

相关文章

  • 顺序栈的实现
    /*顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序表中的位置。做法:以top=0表示空栈,另外设指针base指示栈底元素在顺序栈中的位置。当top与base的值相等时,表示空栈。*/#inc......
  • SpringCloud-Nacos配置中心实现原理(转)
    原文:https://blog.csdn.net/Zong_0915/article/details/113089265作者:Zong_0915 一.NacosConfig实现原理解析首先,NacosConfig针对配置的管理提供了4种操作):获取配置,从NacosConfigServer中读取配置。监听配置:订阅感兴趣的配置,当配置发生变化的时候可以收到一个事件。发布......
  • 记录实现复制EXCEL数据到前端表单
     背景是用户需要把原本在Excel上填报的数据搬运到线上系统进行填报,在做了一个带输入框的表格之后用户提出希望能够实现将EXCEL上的数据复制黏贴到这个表格里的功能。 实现功能的整体思路是在input框上监听黏贴事件,获取到复制的数据。由于在Excel中\t表示换格,\n表示换行,所以......
  • 利用for循环实现乘法表、三角形
    publicclassChengfademo{publicChengfademo(){}publicstaticvoidmain(String[]args){for(inti=1;i<=9;++i){for(intj=1;j<=i;++j){System.out.print(i+"*"+j+"......
  • C# 实现抓取财经网站页面内容的实例方法
    ​ protectedvoidEnter_Click(objectsender,EventArgse)        {            WebClientwe=newWebClient();  //主要使用WebClient类            byte[]myDataBuffer;            myDataBuffer=we.DownloadData......
  • 模拟ArrayList(顺序表)的底层实现
    模拟ArrayLIst的底层实现packagecom.tedu.api04.list;importjava.util.Objects;/***@authorLIGENSEN*Date:2023/7/2011:35*/publicclassArrayListDemo{publicstaticvoidmain(String[]args){ArrList<String>list=newArrList<>......
  • c#实现一元二次方程求解器示例分享
    ​ c#实现一元二次方程求解器示例,需要的朋友可以参考下usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFo......
  • Android实现沉浸式状态栏功能
    Android中实现沉浸式状态栏的功能,供大家参考,具体内容如下1.先上效果图,实现沉浸式状态栏有两种方式,一种是通过写Theme主题的方式,另一种是写代码的方式。若要使多个页面出现沉浸式状态栏,则使用主题的方式更方便,如果只要使单个页面出现,则使用代码方式更好!当然了,看个人喜好而去。......
  • element-ui表格实现表头快速筛选
        filterChange(obj){console.log('obj',obj)constkeys=Object.keys(obj)constvalues=Object.values(obj)console.log('keys',keys)console.log('values',values)letpltKeys=......
  • 实现chrome谷歌浏览器多开(独立环境 独立cookie)
    由于各种各样的原因,你可能需要在一个电脑登录某个平台,比如一个电脑登录3个公众号,或者3个知乎等等。最简单的方案是,直接安装3个不同的浏览器,比如一个谷歌浏览器,一个火狐浏览器,一个Edge浏览器。这个方案也能解决,但如果想多开10个呢?安装10个不同的浏览器也能解决,但感觉这样比较......