单链表的按值查找(输入结点数据域输出结点的位置)数据结构C语言

单链表的按值查找(输入结点数据域输出结点的位置)数据结构C语言

代码段基本上每句都有注释,如有困惑,欢迎留言。博主看到就会回复

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

#define NULL 0
//定义结点结构体类型 
typedef struct LNode{
	int data;			//定义数据域 
	struct LNode * next;	//定义指针域 
}LNode,*LinkList;
//声明函数 
LinkList InitList(LinkList &L);
LinkList GreatList(LinkList &L,int n);
void DisplayList(LinkList L,int n);
int LocateElem_L(LinkList L,int e);

int main(){
	LinkList L;
	int i,n,e;
	//给线性表初始化 
	L = InitList(L);
	printf("请输入单链表的长度:");
	scanf("%d",&n);
	//创建线性表 
	L = GreatList(L,n);
	printf("\n创建的");
	//打印出线性表 
	DisplayList(L,n);
	printf("\n请输入要查找的元素的值");
	scanf("%d",&e);
	i = LocateElem_L(L,e);
	if(i==-1){
		printf("\n单链表中未找到您输入的值(T-T)");
	}else{
		printf("\n你要找的值在单链表中的第%d位。",i);
	}
	return 0;
}
//给线性表初始化 
LinkList InitList(LinkList &L){
	//创建头结点,为头结点分配内存 
	L=(LinkList)malloc(sizeof(LNode));
	//使头结点的指针域为空 
	L->next = NULL;
	return L; 
}
//创建线性表 
LinkList GreatList(LinkList &L,int n){
	//这里使用的是头插法 
	//这里也可以进行初始化,具体原因本博主在前面一片已经讲解过了,如有需要,请自行前往查看 
	//定义一个指针
	LinkList p;
	int i;
	for(i=n;i>0;i--){
		//给要插入链表的结点分配空间 
		p = (LinkList)malloc(sizeof(LNode));
		printf("\n请输入元素值:");
		scanf("%d",&p->data);
		//使要插入结点的指针域等于头结点的指针域,使得要插入的结点位于头结点后,处于第一个位置 
		p->next = L->next;
		//让头结点的指针域指向刚刚插入结点的,使得头结点和第一个结点相连接 
		L->next = p; 
	}
}
//打印单链表 
void DisplayList(LinkList L,int n){
	LinkList p;
	int i;
	//使结点指向首元结点 
	p = L->next;
	printf("单链表为:");
	for(i=0;i<n;i++){
		printf("%d",p->data);
		//得到结点值后,使指针向后移动 
		p = p->next;
	}
}
//查找元素 
int LocateElem_L(LinkList L,int e){
	//声明一个指针 
	LinkList p;
	//将指针指向首元结点 
	p = L->next;
	//计数器 
	int j = 1;
	//当指针指向的结点不为空,并且指针指向的结点的数据域与要查找的值不相等 
	while(p && p->data != e){
		//p指向下一个结点 
		p = p->next;
		//计数器加一 
		j++;
	}
	//如果指针指向的结点不为空,则输出计数器的内容,也即是结点数据域的位置 
	if(p){
		return j;
	}else{
		//如果指针为空,则表明未找到该数据 
		return -1;
	}
} 


运行成功结果
在这里插入图片描述运行错误结果
在这里插入图片描述

  • 8
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ylffly21

感谢!欢迎各位技术大佬。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值