#include <stdio.h>
#include <stdlib.h>
// 单链表的按位置查找和按值查找
typedef int ElemType;
typedef struct LNode{
ElemType data; // 数据域
struct LNode *next; // 指针域
}LNode, *LinkList;
// LNode* 是结构体指针,和LinkList完全等价的
// 按位置查找
LinkList GetElem(LinkList L, int SearchPos){
int i=0;
if(SearchPos<0){
return NULL;
}
while(L && i<SearchPos){
L = L->next;
i++;
}
return L;
}
// 按值查找
LinkList LocateElem(LinkList L, ElemType SearchVal){
while(L){
if(L->data == SearchVal){
return L;
}else{
L = L->next;
}
}
return NULL;
}
// 尾插法
void list_tail_insert(LinkList &L){
L = (LinkList)malloc(sizeof(LNode)); // 申请头结点空间,头指针指向头节点
L->next = NULL;
ElemType x;
scanf("%d", &x);
LNode *s, *r=L; // s指向新结点,r指向链表尾
while(x != 9999){
s = (LinkList) malloc(sizeof(LNode)); // 为新结点申请空间
s->data = x;
r->next = s; // 新结点给尾结点的next指针
r = s; // r要指向新的尾部
scanf("%d", &x);
}
r->next = NULL; // 尾结点的next为NULL
}
// 打印链表
void print_list(LinkList L){
L = L->next;
while(L != NULL){
printf("%3d", L->data);
L = L->next;
}
printf("\n");
}
int main() {
LinkList L; // L是链表头指针,是结构体指针类型
LinkList search; // 用来存储拿到的某一个结点
list_tail_insert(L); // 尾插法新建链表
print_list(L); // 打印新建的链表
// 按位置查找
search = GetElem(L,2);
if(search != NULL){
printf("Succeeded in searching by serial number %d\n", search->data);
}
// 按值查找
search = LocateElem(L, 6);
if(search != NULL){
printf("Search by value succeeded %d\n", search->data);
}
return 0;
}
【数据结构】单链表的按位置查找和按值查找
最新推荐文章于 2023-11-08 19:22:59 发布