数据结构-顺序查找

184 阅读2分钟

顺序查找是数据结构中较为常用的算法,主要作用于线性表的查找,也是最简单的查找算法。依次遍历数据,从而找到匹配内容。

数据结构包括:逻辑结构、存储结构、算法...
逻辑结构:表、栈、队列、串、树、图...
算法:顺序查找、分块查找...

image.png

算法思路:

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 语言写的,主要了解逻辑,代码其实都差不多。