单链表的查找分为按位查找和按值查找,其实上一节中插入和删除的过程已经先实现了查找操作,只不过插入和删除的查找是找到目标元素的上一个元素。而查找是找到目标元素。详情请看代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//单链表定义(结构体)
typedef struct LNode{
int data;//数据域
struct LNode *next;//指针域
}LNode,*LinkList;
//初始化单链表(不带头结点)
/*
bool InitList(LinkList &L){
L = NULL;//将单链表初始化为空表
return true;
}
*/
//初始化单链表(带头结点)
bool InitList(LinkList &L){
L = (LNode *)malloc(sizeof(LNode));//分配一个头结点,并且用L指针变量指向这个头结点
if(L==NULL){
return false;//内存不足分配失败
}
L->next = NULL;//头结点之后暂时还没有结点
return true;
}
//按位查找(带头节点)
LNode *GetElem(LinkList L,int i){
if(i<1){
return NULL;
}
LNode *p = (LNode *)malloc(sizeof(LNode));
int j=0;
p = L;
while(p!=NULL&&j<i){
p = p->next;
j++;
}
return p;
}
//按值查找(带头节点)
LNode *LocateElem(LinkList L,int e){
LNode *p = (LNode *)malloc(sizeof(LNode));
p = L->next;//使指针p指向第一个结点
while(p!=NULL && p->data!=e){
p = p->next;
}
return p;//找到返回结点指针,否则返回NULL
}