C语言,如何按值查找,然后返回这个值在链表中的位置?
typedef struct LNode
{
    int data;
    struct LNode* next;
}LNode,*LinkList;

LinkList LocalElem(LinkList a,int e)
{
    LNode* p=a->next;
    int i=1;
    while(p!=NULL && p->data!=e)
    {

        if(p->data==e)
        {
            return i;
        }
        i++;
        p=p->next;
    }

    return p;
}

int main()
{
    LNode a;
    LinkList p;

      printf("\n");
    p=LocalElem(p,1);
    if(p!=NULL)
    {
        printf("%d\n",i);
    }

        return 0;

输出后怎么总是出来一个8,请问要怎么改???(代码里面省略了创建链表的部分)

c
-1

2个回答

没看懂弄个链表,怎么问的是输出指针值,单纯输出指针的值就是解引用 *p 就是了

0

LinkList l = LocalElem(你的链表, 要找的元素);
if (l != NULL) printf("%d", l->data);

0
weixin_42488395
小道枝 回复caozhy: 好的,非常感谢!
7 个月之前 回复
caozhy
贵阳挖掘机马善福自备车辆专业挖游泳池 回复weixin_42488395: 说明你最后一个节点不是null,而且data也没有找到,怀疑你初始化和输入数据的代码都不对
7 个月之前 回复
weixin_42488395
小道枝 照着这样改后数出来是一串数字,我更新了问题里面的代码,能再帮我看看哪里错了吗
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
单链表按值和按序号查找
#include<malloc.h>;#include<stdio.h>;typedef struct node{     int data;     struct node *next;}NODE; NODE *locate(NODE *head,int value){   /*按值查找*/       NODE *p;      p=head->next;  ...
单链表的功能使用:初始化,赋值,输出,删除,按值查找,按地址查找,数据修改
#include #include typedef struct Node* A; struct Node { A next; int value; }; int init(A *head);                                                        //单链表初始化 int insert(A head, int x);  
链表节点查找
在一个非空单向链表中(数据域的值没有重复)找到值为key的节点, 找到则返回节点的地址,否则返回nullElemSN* FindNode(ElemSN *h,int key) { ElemSN *p; for (p = h; p; p = p->next) { if (p->data == key) { break;
数据结构-单链表查找按序号查找
#include #include #define ERROR -40000 using namespace std; typedef struct LNODE { int data; struct LNODE *next; }Lnode; Lnode *Input(int n) { Lnode *head,*p,*q; head=p=(Lnode*)malloc(sizeof(Lno
线性链表尾插法及查找第i位的值 (完整代码)
单链表的创建(尾插法):首先创建一个头指针,在创建一个循环进行赋值,链接。void creat(linklist &l) 查找链表第i位的值:将第i个元素赋值给e,若不存在第i个元素返回-1。 status getelem_l(linklist l,int i,elemtype &e)  代码实现: //创建单链表及查找第i位的值 #include <stdio.h...
数据结构研究 ----单链表的按序号查找
采用一个计数器j=0;然后根据分配的序号i,在满足j 代码: ListNode* GetNode(LinkList head,int i){ //在带头结点的单链表head中查找第i个结点,若找到(0<=i<=n), //则返回该结点的存储位置,否则返回NULL。 int j; ListNode *p; p=head;j=0;//从头结点开始扫描 while(p->ne
在链表中获取一个数据、查找操作C语言实现
SN *Get_S_Node ( SN *head ) { /* head 为要查询的链表的头指针 */ SN *Get_S_Node = NULL; INT32 OSM = 1,i32i = 0, data_num = 0; /* OSM是标志符,i32i是一个循环体内的变量,data为要获取的元素的序号 */ Get_S_Node = ( SN * )
实现链表的初始化,按值查找,插入,删除
#include #include #include #define OK   1 #define ERROR  0 #define TRUE 1 #define FALSE 0 typedef char ElemType; typedef struct Node    /*结点类型定义*/ {  ElemType data;  struct Node  * nex
C语言:单链表查找其中节点的数据
#include #include #define MAX 10 struct List { int number; int total; struct List *next; }; typedef struct List Node; typedef Node *Link; int data[2][MAX] = {3, 9, 25, 5, 7, 26, 56, 80, 2, 6
链表输出某一位置的值以及该位置
#include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int status; typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; void
数据结构-单链表查找按值查找
#include #include #define ERROR -40000 using namespace std; typedef struct LNODE { int data; struct LNODE *next; }Lnode; Lnode *Input(int n) { Lnode *head,*p,*q; head=p=(Lnode*)malloc(sizeof(Lno
C语言—链表的查找
链表的查找的基本思路 我们以后想要得到的插入和删除,都是建立在链表的查找之上,如果你想删除或者插入但是你却连位置都没有,这就很尴尬了,所以链表查找我觉得挺重要的,也是挺难理解的,因为只要理解这个后面的插入和删除功能,你自己很快就写出来了,
单链表元素定位(输出链表中元素的下标)
#include #include #include using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int El
双向链表的功能实现:初始化,插入,按位置插入,按位置删除,按值删除,遍历打印等
#include #include #define F -1 typedef struct Node* node; struct Node { node prior; node next; int value; }; int init(node *head);                                          //初始化 int insert
C语言数据结构之如何快速查找链表的中间节点
腾讯面试题:如何快速查找指定链表的中间节点?解法1:遍历法。    先遍历一遍统计链表长度,然后再遍历长度的1/2便即是中间节点。    时间复杂度O(3n/2)解法2:快慢指针。(推荐)    设置两个指向链表头结点的指针,一个指针的遍历速度是另一个指针的2倍,当快的指针遍历完毕,慢指针即是中间节点。    时间复杂度O(n/2)解法二比解法一速度快了足足3倍,可见算法的威力。解法二代码:Lin...
链表中找最大值
typedef struct { int data; Node *next; Node *prev; }Node; int find_max(Node *phead) { assert(phead != NULL); Node *p = phead->next; int max = p->data; while(p->next != phead->next) {
面试题——查找单链表的中间节点
链表是基本的数据结构之一,面试题中链表占很大一部分,可见链表操作是非常重要的。我对一些常见的链表操作进行的归纳。        下面的问题为:查找单链表的中间节点。题目分析:       链表的特点就是有很多的节点,每个节点有数据域和指针域两部分,指针域存放的是下一个节点的地址,根据地址找到下一个节点。链表只能从前到后遍历,不能从后到前遍历。       对于这个问题,我们首先能够想到的就是先遍历
单链表操作之查找中间结点
***单链表操作之查找中间结点*** //查找链表的中间结点; //自定义的结点结构体和头指针结构体: #include #include #include #include typedef int DataType; typedef struct LinkNode { DataType data; struct LinkNode* n
数据结构单链表的查找
1.单链表的查找运算  (1)按序号查找 ① 链表不是随机存取结构      在链表中,即使知道被访问结点的序号i,也不能像顺序表中那样直接按序号i访问结点,而只能从链表的头指针出发,顺链域next逐个结点往下搜索,直至搜索到第i个结点为止。因此,链表不是随机存取结构。 ② 查找的思想方法      计数器j置为0后,扫描指针p指针从链表的头结点开始顺着链扫描。当p扫描下一个结点时,
【C】查找关键字所在行,输出位置及该行
C圣经上的例子,看完书自己写了一遍,可以运行。
《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)
转载请注明出处:http://blog.csdn.net/xdz78 #include #include //查找单链表中的特定元素,《数据结构与算法——c语言描述》 3.11 答案 int count;//全局变量自动初始化为0 int m;//需要查找的元素大小 typedef struct student { int data; struct studen
数据结构学习(三)——单链表的操作之查找、删除、插入。
创建链表的方法采用尾插法,且是改进版的尾插法,即添加了一个辅助头节点。 下面的代码是对插入、删除、查找的一个整体操作。其中查找分为按值和按位置查找。删除和插入都是按给定位置操作。 #include #include typedef struct list { char data; struct list *next; }linklist; linklist *CreateLinkl
[C语言]查找链表的中间元素
查找链表的中间元素,最简便的方法之一,就是先遍历一遍链表,得到链表长度,再根据长度遍历得到中间的元素。我这里用的是快慢指针去查找,只需要遍历一次即可,快指针每次走两步,慢指针每次走一步,当快指针走完了,慢指针所指位置即中间元素的位置,具体实现如下C代码实现struct ListNode { int val; struct ListNode *next; };/* ** 若链表元素为奇
C语言——链表(二)之数据的查找、插入与删除节点
 查找包含指定的数的节点: node* findData(int n, node *head){ node *curNode=head; while(curNode){ if(curNode-&amp;gt;data==n){ printf(&quot;Find %d in the list.&quot;,n); return curNode...
java实现单链表(增加节点,删除节点,根据下标获取节点,获取链表大小,链表逆序)
最近面试被问到链表的问题很多,让自己写一个链表,并实现链表逆序,自己突然发现,用java实现链表还真是一件费时的事情,更何况笔试那点时间。现在做一下记录,如果有错误,希望看见的人能指出,谢谢。 定义一个Node节点: public class Node { Node next; //下一个节点的引用 Object obj; //节点元素 public Node(Object
单链表上查找算法的实现
建立一个长度为n的带头结点的单链表,在该表中寻找第i个结点,若找到,则输出ok,否则输出error。处理数据类型为整型。Description第一行为链表的长度n; 第二行为链表中的数据元素; 第三行为要找的结点i。Input找到就输出ok,没找到就输出error。Output1234101 2 3 4 5 6 7 8 9 105Sample Input1ok#include using nam
单链表查找算法,查找成功返回1,否则返回0
1.试着简述一下DMA?? 答:DMA是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用DMA可以让系统CPU从实际的I/O数据传输中摆脱出来,从而大大提高系统的吞吐量。 2.中断和轮询哪个效率高??怎样决定是采用中断方式还是轮询方式去实现驱动?? 答:中断是CPU处于被动状态下接收设备的信号,而轮询是CPU主动去查询该设备是否有请求。如果请求设备是一个频繁请求CP...
单链表的查找(完整程序 以字符串为数据)
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> #define N 3 typedef struct node { char name[20]; struct node *next; }stud;stud *creat(int n) { stud *p,*h,*s;
C语言链表初试(输出链表中的数、删除某个数)
主体代码#include<stdio.h> #include<stdlib.h>typedef struct _node{ int value; struct _node *pointer; }node;typedef struct _package{ node *head; }package;void linked_list(package *package); //创造
查找链表中值最大的节点
递归的方式查找链表中值最大的节点,用于交流学习。
C语言实现链表的插入、删除、查询操作
前言本程序是数据结构上机实验内容,参考《数据结构(C语言版)》(清华大学出版社)中链表部分的伪代码实现。题目要求 设计链表结构体 建立一个链表,并录入n个原始数据 实现向链表中指定位置插入数据的功能 实现删除链表中指定位置的数据的功能 实现获取链表中指定位置的数据的功能 使用malloc函数动态分配内存地址 实例代码及说明#include <stdio.h> #include <stdlib.h>#
2.13 -实现Locate(L,x)返回x在链表中的位置
typedef struct node { int data; struct node*next; }Linklist; typedef struct { int elem[max]; int length; }Seqlist; int Locate(Linklist &L,int x) { int count=0; Linklist*p=&L; while(p) { if(p
将链表中数据域为key 的节点删除(链表有重复值)
算法思路: 链表中数据域为key 的节点可能是头结点,和中间尾节点。要分别进行讨论。 删除链表的头结点: 挪头指针, 将节点删除, 将原来指向删除节点的指针指向现在的头结点 删除链表的中间尾节点: 将要删除的链表节点从链表中移除 删掉要删除的节点 将原来指向删除节点的指针指向新位置 注意: 使用两指针联动进行遍历链
数组排序并找出元素索引
题目描述:先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。举例:where([1,2,3,4], 1.5) 应该返回 1。因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3,4],而1.5对应的索引值就是1。同理,where([20,3,5], 19) 应该返回 2。因为数组会先排序为 [3,5,20],19插入到数组[3,5,20]后变成[3,5,19,20],而
Java单链表基本操作(一)--顺序查找
本系列博文,将围绕一下几个方面: Java单链表基本操作: (一)顺序查找; (二)指定位置增加节点; (三)删除当前节点; (四)单链表反转; (五)输出倒数第K个节点; (六)删除重复节点; (七)合并两个排序单链表; (八)交换相邻节点的值;本节讲述最基础的顺序查找,主要熟悉一下单链表的属性和基本操作。/* * 查找值为num的元素位置,没有返回-1*/ public cl
[leetcode]——返回单链表中第k个节点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[3,4,5]) 返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。 注意,我们返回了一个 ListNode 类型的对象 ans,这样: ans.val = 3, ans.next...
查找链表中倒数第k个结点
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。 难点: 不能回退,不知道倒数第k个节点是顺数的第几个节点。 思路:让两个节点保持k的距离,如果最后一个节点到达链表末尾,第二个节点也就到了k的位置。---这叫做窗口概念。 class Window(){ public int first; public int last; ...
单链表的基本操作头插法尾插法创建插入删除遍历
单链表的基本操作,单链表头插法、尾插法、创建、插入、删除、遍历
单链表——头插法、尾插法和查找
#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;malloc.h&amp;gt;#define OK 1#define ERROR 0 typedef struct Node{ int date; struct Node * next;}Node, *LinkList; void InitList(LinkList *L)//初始化单链表{ *L=(LinkList)malloc(s...
顺序表的插入,删除,按值查找操作
顺序表的插入,删除,按值查找操作 线性表的顺序存储又称为顺序表。顺序表的特点是表中元素的逻辑顺序和其物理顺序相同,我的理解就是在内存中找到一块空地,通过占座的形式先把这块空间占住,然后把相同的数据类型依次往里面放,C语言的一维数组就是实现顺序结构的存储。但要注意以下几点: 线性表的长度不等于数组的长度,但是一定小于等于数组的最大长度,即length &amp;amp;amp;amp;amp;lt;= MAXSIZE 线性表的长度就是...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java按班级查找 java的一些学习这个。