精华内容
下载资源
问答
  • 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表...
  • 双向链表查找

    千次阅读 2017-05-20 13:21:14
    typedef struct linknode//定义双向链表 { int data; linknode *prior,*next; } Node,*Linklist; Linklist Createlist(int n);//建立双向链表 int Find(Linklist L,int x);//在链表中查找值为x的下标 void Sh
    #include <stdio.h>
    #include <malloc.h>
    
    typedef struct linknode//定义双向链表
    {
        int data;
        linknode *prior,*next;
    } Node,*Linklist;
    
    Linklist Createlist(int n);//建立双向链表
    int Find(Linklist L,int x);//在链表中查找值为x的下标
    void Showlist(Linklist L);//输出双向链表
    
    int main(void)
    {
        int n;
        scanf("%d",&n);
        Linklist L1=Createlist(n);
        Showlist(L1);
        printf("%d\n",Find(L1,5));
        return 0;
    }
    
    Linklist Createlist(int n)//建立双向链表
    {
        Linklist head=(Linklist)malloc(sizeof(Node));//申请头结点
        Node *p,*e;
        int x;
        p=head;//让p指向头结点
        for(int i=0; i<n; i++)
        {
            e=(Linklist)malloc(sizeof(Node));//申请新的节点
            scanf("%d",&x);
            e->data=x;
            p->next=e;//前一个节点的后继指向新的节点
            e->prior=p;//新节点的前驱指向上一个节点
            p=e;//始终让p指向当前节点
        }
        p->next=NULL;//最后一个节点的后继为空
        head=head->next;//头结点为空节点,所以向后移动一个
        head->prior=NULL;//头结点的前驱为空
        return head;//返回头结点
    }
    
    void Showlist(Linklist L)//输出双向链表
    {
        while(L)
        {
            printf("%d ",L->data);
            L=L->next;
        }
        printf("\n");
    }
    
    int Find(Linklist L,int x)
    {
        int i = 1;
        while(L != NULL && L->data != x )//寻找值为x的元素**注意这里循环的条件不能写反。原因,当L == NULL 时候 L->data会出错
        {
            i++;                    
            L= L->next;
        }
        if(L == NULL)               //如果没找到返回-1
            return -1;
        else 
            return i;              //如果找到返回i
    }
    

    展开全文
  • 代码实现 st_doubNode* searchDoubListNode(st_doubNode* head, int num){ if(NULL == head){ return NULL; } st_doubNode* p = NULL; st_doubNode* q = NULL; p = head; while(NULL !...data...

    代码实现

    st_doubNode* searchDoubListNode(st_doubNode* head, int num){
    	if(NULL == head){
    		return NULL;
    	}
    
    	st_doubNode* p = NULL;
    	st_doubNode* q = NULL;
    
    	p = head;
    	while(NULL != p){
    		if(p->data == num){
    			q = p;
    			break;
    		}
    
    		p = p->next;
    	}
    	
    	return q;
    }
    
    
    void testSearchDoubList(void){
    	st_doubNode * rst = NULL;
    	rst = searchDoubListNode(gDoubHead, 6);
    
    	printf("\n************  testSearchDoubList ************ \n");
    	
    	if(NULL != rst){
    		printf("node: %p, data = %d\n", rst, rst->data);
    	} else {
    		printf("Can not found num 6 \n");
    	}
    
    	rst = searchDoubListNode(gDoubHead, 119);
    	if(NULL != rst){
    		printf("node: %p, data = %d\n", rst, rst->data);
    	} else {
    		printf("Can not found num 119 \n");
    	}	
    }

    调试编译

    gcc listMain.c doublist.c  -o a.exe -DDEBUG

    调试输出

    ************  testSearchDoubList ************
    node: 0x1e6d130, data = 6
    Can not found num 119
    

     

     

     

    展开全文
  • 查找元素 ...//**双向循环链表 查找元素或元素指针** #include<stdio.h> #include<Stdio.h> typedef struct node { int data; struct node *next, *pre; }link; //生成该链表 link *creat...

    查找元素
    如果看不懂 建议去看看我的 单链表
    加油 入门后简直快活

    //**双向循环链表  查找元素或元素指针**
    #include<stdio.h>
    #include<Stdio.h>
    typedef struct node
    {
        int data;
        struct node *next, *pre;
    }link;
    //生成该链表
    link *creat(link *head,int n)
    {
        link *p, *q;
        //初始化
        p= head = (link*)malloc(sizeof(link));
        head->pre = head;
        head->next = head;
    
        while(n--)
        {
            q= (link*)malloc(sizeof(link));
            printf("输入一个数据:");
            scanf("%d",&q->data);
            p->next = q;
            q->pre =p;
            q->next = head;
            head->pre = q;
            p =q;
        }
        return head;
    }
    link *get(link *head,int i)
    {
        link *p=head;
    
        while(i!=0)
        {
            i--;
            p = p->next;
        }
        printf(" 该元素为:%d\n",p->data);
        return p;
    }
    void main()
    {
        link *head, *target;
        int n, i;
        printf("有几个数据?");
        scanf("%d",&n);
        head = creat(head,n);
        printf("你要查找第几个元素?\n");
        scanf("%d",&i);
        target = get(head,i);
    }
    
    
    展开全文
  • 如何写![图片](https://img-ask.csdn.net/upload/201703/17/1489682816_321452.jpg)
  • 完成双向链表的插入、删除以及查找,将学生管理系统使用的数组,以双向链表的方式实现,能够支持无限制的学生人数的增删改查以及保存。 3,代码实现。 #include #include #include #include typedef struct ...
  • 主要介绍了Java实现双向链表(两个版本)的相关资料,需要的朋友可以参考下
  • 图文详解双向链表原理

    千次阅读 2019-10-13 18:44:23
    双向链表 双向链表的主要优点: 对于任意给的结点,都可以很轻易的获取其前结点和后结点。 其主要缺点:每个结点需要保存next和prev两个属性,因此需要更多的空间开销,同时结点的插入与删除操作也将更加耗时,因为...

    双向链表

    双向链表的主要优点: 对于任意给的结点,都可以很轻易的获取其前结点和后结点。
    其主要缺点:每个结点需要保存next和prev两个属性,因此需要更多的空间开销,同时结点的插入与删除操作也将更加耗时,因为需要操作更多的指向操作。

    双向链表单个节点结构:
    在这里插入图片描述
    双向链表的数据结构:
    在这里插入图片描述

    双向链表的插入操作

    插入数据到链表尾部
    在这里插入图片描述
    插入数据到链表中间
    在这里插入图片描述

    双向列表删除操作

    删除链表尾部数据
    在这里插入图片描述
    删除链表中间数据
    在这里插入图片描述

    循环双向列表设计

    循环双向链表 是在普通双向链表基础上进化得到的。在普通的双向链表中,如果我们要获取最后一个节点的时候,我们只能从头开始遍历,一直遍历到最后才能够拿到最后一个节点的数据。而循环双向链表会把header的prev指向最后一个节点,最后一个节点next指向header。其数据结构如图所示:
    在这里插入图片描述
    循环链表的添加、删除和普通的双向链表是一模一样的,这里就不再赘述。

    展开全文
  • 单向链表的时间复杂度 在单向链表原理和实现中已经和动态数组相比对比并...双向链表的时间复杂度 查找节点 因为对节点的添加和删除操作需要查找对于index的节点,首先分析以下查找节点的代码: - (JKRLinkedListNode...
  • 双向链表查找、删除、插入节点

    千次阅读 2018-06-21 00:04:47
    双向链表前插入无需定位到节点的前一位,因为其本身有prior指针。从根本上来讲,它和单链表是类似的:#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; typedef struct student { int num; ...
  • 单向链表和双向链表

    2020-05-08 20:46:54
    1.单向链表 包含两个域,一个信息域包含...双向链表有两个指针,分别指向当前节点的上一个节点和下一个节点。第一个节点的"前链接"指向NULL,最后一个"后连接"指向null。 可以从任何一个节点访问前一个节点,也可以访
  • 当不知道数据量大小的时候,可以使用“链表”来动态储存和处理数据 需要对链表进行反向操作时 2. 思路 分类:(本文使用 “有头节点”) 有头节点 链表 无头节点 链表 存储方式:节点 节点结构: 数据域(Data...
  • 本文详细介绍了数据结构的双链表的定义,以及双向链表的建立、查找、插入和删除
  • 本文实例讲述了JavaScript 双向链表操作。分享给大家供大家参考,具体如下: 一个 双向链表(doubly linked list) 是由一组称为节点的顺序链接记录组成的链接数据结构。每个节点包含两个字段,称为链接,它们是对节点...
  • 建立双向链表,将它作为一个文本缓冲区buffer。从文本文件中逐行读取字符串,作为链表一个节点的数据。从键盘输入命令字符,可以对缓冲区buffer中的文本进行定位,查找,替换,删除某行,添加某行等操作。编译环境VC...
  • 单链表、双向链表、循环链表

    千次阅读 多人点赞 2019-07-26 14:26:09
    学习三种常见的链表结构,他们分别是:单链表、双向链表和循环链表。 单链表 单链表有两个较特殊节点,头结点和尾节点。头结点用来记录链表的基地址,可以用来遍历整条链表。尾结点的指针不是指向下一个节点而是指向...
  • 双向链表-查找

    千次阅读 2018-03-30 20:47:15
    "没有查找到该数据!\n" ); //当在整条链表中没找到对应结点时才会执行到这一条语句 } void print(student *h){ student *p; //临时指针 p=h->Next; //从第二个结点开始 printf ( "数据信息为:\n" ); ...
  • Java实现双向链表

    2020-03-22 23:22:42
    用Java定义一个双向链表,实现链表的基本操作: 初始化、获取头结点、添加新元素、删除链表元素、 获取链表元素、查找链表元素、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空链表。
  • 数据结构之双向链表地 Java 实现 单链表只能从前往后遍历 ,如果链表地长度较大 , 遍历到链表后半部分地时候想 要往前查找 ,就只能回到开头 ,重新遍历了 . 双向链表提供了这个能力 , 即允许前向遍历 , 也允许后向遍历...
  • 尾插法(用尾插法建立链表);2.头插法(用头插法建立链表);3.显示(打印链表);4.求表长(输出链表长度);5.后插(在指定节点后面插入);6.前插(在指定节点前面插入);7.按位置插入(将元素插入指定位置);...
  • 双向链表查找,排序程序

    千次阅读 2020-03-02 23:08:57
    双向链表在排序和查找时候,如果采用从两边开始查找或者排序的需要解决奇偶的问题,再考虑这个问题的时候建议拿出笔在草稿纸上画图。 附上程序: #include <stdio.h> #include <stdlib.h>...
  • STL—list(双向链表)详解

    千次阅读 2019-03-17 16:25:54
     list 容器视线里双向链表的数据结构,数据元素通过链表指针连城逻辑意义上的线性表,这样,对链表的任一位置的元素进行插入、删除和查找都会是极快的。下图是list 采用的双向循环链表的结构示意图。  list 的每...
  • 1. list初始化: (1)list t; //没有任何元素 (2)list t(10); //创建有10个元素的链表 ...(1)前插法:在链表头部插入新元素,链表自动扩张,形式:  t.push_front(8); (2)尾插法:在链表尾
  • 实现双向链表查找、替换、删除、插入,并用线程同步技术实现了多线程读写与线程安全
  • 一、双向链表的基本概念 二、双向链表的简单实现 一、双向链表的基本概念 双向链表和上一节博客中的单向链表相比,只是在结点元素中多了一个指向前一个结点元素的指针。为什么需要双向链表,因为在实际的工程...
  • 地址传递:双向链表的销毁双向链表的打印开辟一个新结点双向链表的尾插双向链表的头插双向链表的尾删双向链表的头删双向链表查找双向链表在pos的前面进行插入双向链表删除pos位置的结点源代码List.h(双向链表结构...
  • 单链表的节点有item和next,而双向链表的节点还必须有一个指向前一个节点的prior(别的命名也行,反正必须有个东西指向前一个节点)。prior存在的意义也是为了更好地查找节点的前驱节点。因此必须对Node进行改造。 ...
  • 双向链表的建立、插入、查找和删除 #include <stdio.h> #include <stdlib.h> typedef int ListData; typedef struct dnode { ListData data; struct dnode *llink,*rlink; }DblNode; typedef ...
  • 添加(默认添加到双向链表的最后) (1).先找到双向链表的最后这个节点(temp) (2).temp.next = newHeroNode (3).newHeroNode.pre = temp; 修改思路和单链表一样 删除 (1).以为是双向链表,因此,我们可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 79,756
精华内容 31,902
关键字:

双向链表的查找