先上函数模块
按序号查找结点
//按序号查找结点
LNode *GetElem(LinkList L,int i){
int j=1;
LNode *p=L->next;
if(i==0)
return L;
if(i<1)
return NULL;
while(p&&j<i){
p=p->next;
j++;
}
return p;
}
按值查找
//按值查找
LNode *LocateElem(LinkList L,Elemtype e){
//LNode *p=L->next;
LNode *p; int j=1;
p=L;
p=p->next;
//while(p!=NULL&&&p->data!=e){
//p=p->next;
//}
//上面的代码输出不出来!!!!!!!
while(p!=NULL){
if(p->data==e){
printf("恭喜你找到了,位置是%d\n",j);
return p;
}
p=p->next;
j++;
}
printf("不好意思并没有找到%d",e);
return p;//找到之后返回该结点指针,否则返回null
}
王道书上面那段代码不知道为什么输出不出来 唉!!!只能先按自己的思路来做了
从头插法(带头的链表来做这个按序查找和按值查找结点的代码)
po出全部可以运行的代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int Elemtype;
//定义结构体
typedef struct node{
Elemtype data;
struct node * next;
}LNode,*LinkList;
//1.1⚠️
//头插法建立单链表
LinkList List_HeadInsert(LinkList L){
LNode *s;int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
//按序号查找结点
LNode *GetElem(LinkList L,int i){
int j=1;
LNode *p=L->next;
if(i==0)
return L;
if(i<1)
return NULL;
while(p&&j<i){
p=p->next;
j++;
}
return p;
}
//按值查找
LNode *LocateElem(LinkList L,Elemtype e){
//LNode *p=L->next;
LNode *p; int j=1;
p=L;
p=p->next;
//while(p!=NULL&&&p->data!=e){
//p=p->next;
//}
//上面的代码输出不出来!!!!!!!
while(p!=NULL){
if(p->data==e){
printf("恭喜你找到了,位置是%d\n",j);
return p;
}
p=p->next;
j++;
}
printf("不好意思并没有找到%d",e);
return p;//找到之后返回该结点指针,否则返回null
}
int main() {
LinkList L11;
LNode *ptr,*ptr2;
int i,e;
//1.1头插法建立单链表
printf("头插法建立单链表,输入值(9999结束)\n");
L11 = List_HeadInsert(L11);
PrintList(L11);
//2按序号查找结点元素
printf("请输入要查找的元素序号i:\n");
scanf("%d", &i);
ptr = GetElem(L11, i);
if (ptr) {
printf("找到第%d 个元素%d\n", i, ptr->data);
} else {
printf("没有找到第%d个元素!\n", i);
}
//3请输入要查找的值
printf("请输入要查找的值:\n");
scanf("%d", &e);
ptr2= LocateElem(L11, e);
if (ptr2) {
printf("找到%d 值!\n", ptr2->data);
} else {
printf("没有找到%d值!\n", e);
}
return 0;
}