顺序查找是数据结构中较为常用的算法,主要作用于线性表的查找,也是最简单的查找算法。依次遍历数据,从而找到匹配内容。
数据结构包括:逻辑结构、存储结构、算法...
逻辑结构:表、栈、队列、串、树、图...
算法:顺序查找、分块查找...
算法思路:
1、被查找的线性表L、查询元素K
2、由 0 - L.length (非带头结点链式存储为链表长度,带头结点链式存储为链表长度-1)遍历线性表各个元素,对比每一个元素(节点)的内容。
算法代码:
(1)、顺序表
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
// 设置最大长度
#define MaxSize 10
// 创建顺序表结构
typedef struct List {
// 创建数组(这里以静态存储方式创建表,如果使用动态存储,则使用malloc函数开辟空间即可)
int arr[MaxSize];
// 记录数组长度
int len;
}List;
// 实例化表
void InitList(List* L) {
int i = 0;
while (i<MaxSize)
{
L->arr[i] = 0;
}
L->len = 0;
}
// 添加数据
int AddList(List* L,int num) {
/*
根据需求定义
*/
return 0;
}
// 顺序查找算法,返回下标,失败返回-1
int getList(List* L, int num) {
// 记录位置
int i = 0;
// 遍历表
while (i < L->len)
{
// 如果找到,退出函数
if (L->arr[i] == num) { return i; }
i++;
}
return -1;
}
int main() {
List L;
InitList(&L);
return 0;
}
(2)、链表
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
// 设置链表结构(这里使用包含头结点的单链表)
typedef struct List {
// 节点数据
int data;
// 指针
struct List* next;
}List;
// 实例化链表
void InitList(List* L) {
// 开辟空间,存放节点
L = (List*)malloc(sizeof(List));
// 判断是否有地址指向L
if (L == NULL) { return ; }
// 初始化链表,头结点尾指针指向空(或者自己)
L->next = NULL;
}
// 查找算法
int getList(List* L, int num) {
// 计算
int i = 1;
// 跳过头节点
L = L->next;
// 遍历每一个节点
while (L->next != NULL) {
if (L->data == num) {
return i;
}
L = L->next;
i++;
}
return -1;
}
int main() {
List L;
InitList(&L);
return 0;
}
上面内容是使用 c 语言写的,主要了解逻辑,代码其实都差不多。