在线性表中查找特定元素是线性表的常用操作之一。要求补全函数search,实现在一个链表中搜索包含指定数据的结点。如果链表中有多个结点包含该数据,则返回第一个。
相关知识
由于链表结点都是动态内存分配得到的,在内存中不是连续存储,没法使用二分法之类的算法来实现信息检索,但可以使用顺序查找的方法。
顺序查找需要遍历整个链表,逐个检查每个结点是否满足条件。程序中的printList函数已实现了遍历功能,可以参照其来实现查找函数。其中printList函数的实现代码如下:
// 函数printList:输出链表,每个数据之间用一个空格隔开
// 参数:h-链表头指针
void printList(node *h)
{
cout << "List:";
while(h)
{
// h为真,即h指向的结点存在,则输出该结点的数据
cout << " " << h->data; // 输出结点数据
h=h->next; // 将该结点的指针域赋值给h,h就指向了下一个结点
}
cout << endl; // 输出换行符
}
#include <iostream>
//#include "linearList.h"
using namespace std;
// 定义结点结构
struct node
{
int data; // 数据域
node * next; // 指针域,指向下一个结点
};
// 函数search:在链表中查找包含数据num的结点
// 参数:h-链表头指针,num-要查找的数据
// 返回值:找到了返回该结点的地址,否则返回NULL
node * search(node * h, int num);
// 函数insertSort:链表排序插入
// 参数:h-链表头指针,t-指向要插入的结点
// 返回值:插入结点后链表的首结点地址
node * insertSort(node *h, node *t);
// 函数insertHead:链表头部插入
// 参数:h-链表头指针,t-指向要插入的结点
// 返回值:插入结点后链表的首结点地址
node