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

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

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

#include
#include

#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;
	}
} 


运行成功结果
单链表的按值查找(输入结点数据域输出结点的位置)数据结构C语言_第1张图片运行错误结果
单链表的按值查找(输入结点数据域输出结点的位置)数据结构C语言_第2张图片

你可能感兴趣的:(数据结构,数据结构,c语言,开发语言)