408数据结构算法模板

下面这份408数据结构算法模板耗时3天整理,希望对大家有用

408算法题概述

得分要点

会写结构定义(没有就自己写上)
写清楚解题的算法思想
描述清楚算法实现
最后写出时间和空间复杂度

关于改卷

1、改卷老师不会上机试
2、老师改的是扫描卷
3、图文结合帮助改卷老师理解,有利于给分。
考试手写代码注意事项:
1、命名应当规范(变量、函数命名要见文知意)
2、格式要标准(换行、缩进、对齐)
3、注释要写清楚,让阅卷老师快速读懂

算法答题特点

408中的算法题主要涉及基本的数据结构(线性表和树),但也可能会涉及图。题目形式多样,但通常需要使用常见算法(排序算法、查找算法、双指针技巧、树的遍历、DFS、BFS)来解决问题或情景。

算法题基本都是在现有的算法模板下按照题目的意思进行变形得到的
算法题答题技巧
题源来自LeetCode,一般是LeetCode的改编,一般相当于LeetCode的中等偏下难度的算法题,需要参加机试的同学可以顺便带掉408算法题,如果目标院校没有机试408算法需要单独准备,如果算法想拿高分题还是要刷题的,如果不想刷题,暴力解(几层for循环)也能拿到一半分,刷题是很耗时间的,复习时间紧的建议放弃,想拿满分或者高分的建议刷题。

以上内容仅作为参考,不作为复习建议
原文传送门:数据结构算法模板

408算法模板介绍

这份算法模板是按照数据结构课本大纲整理的,基本上涵盖了大部分需要用到的手写代码,一共分为21个部分,比如第一部分是
在这里插入图片描述

考虑到很多人不会写结构体定义,这份模板中帮大家整理了结构体定义:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后知道定义之后,就会给出一些经常需要用到的模板比如线性表有这些常用的操作:
在这里插入图片描述

以上只是以顺序表举例,模板中还包括了单链表的结构体定义和基本操作,双链表的结构点定义和基本操作,栈,队列,串,树和图还有排序算法等等

对于一些重要的算法,我还整理了一些可以实际运行的C语言版本代码,以及测试用例,比如比如图的深度优先搜索算法:

下面就是我调试过,保证可以运行的C语言代码:

#include <stdio.h>
#include <stdlib.h>

#define maxSize 100 // 定义邻接表的最大大小

typedef struct ArcNode {
    int adjvex; // 该边所指向的节点的位置
    struct ArcNode *nextarc; // 指向下一条边的指针
    int info; // 该边的相关信息(如权值)
} ArcNode;

typedef struct {
    char data; // 定点信息
    ArcNode *firstarc; // 指向第一条边的指针
} VNode;

typedef struct {
    VNode adjlist[maxSize]; // 邻接表
    int n, e; // 定点数和边数
} AGraph; // 图的邻接表类型

int visit[maxSize]; // 定义一个全局数组,用于标记节点是否被访问过

void dfs(AGraph *G, int v) {
    ArcNode *p;
    visit[v] = 1; // 标记节点v已被访问
    printf("%d ", v); // 输出节点v的值
    p = G->adjlist[v].firstarc; // 让p指向顶点v的第一条边

    while (p != NULL) {
        if (visit[p->adjvex] == 0) { // 如果节点未被访问,则递归遍历该节点
            dfs(G, p->adjvex);
        }
        p = p->nextarc; // 继续遍历下一条边
    }
}

int main() {
    AGraph G;
    int i, j, k;

    G.n = 6; // 定点数为6
    G.e = 7; // 边数为7

    // 初始化邻接表
    for (i = 0; i < G.n; i++) {
        G.adjlist[i].data = i;
        G.adjlist[i].firstarc = NULL;
    }

    // 构造邻接表
    int edges[7][2] = {{0, 1}, {0, 2}, {1, 3}, {1, 4}, {2, 4}, {3, 5}, {4, 5}};
    for (k = 0; k < G.e; k++) {
        i = edges[k][0];
        j = edges[k][1];

        // 头插法插入边
        ArcNode *p = (ArcNode *)malloc(sizeof(ArcNode));
        p->adjvex = j;
        p->nextarc = G.adjlist[i].firstarc;
        G.adjlist[i].firstarc = p;

        // 无向图需要插入反向边
        p = (ArcNode *)malloc(sizeof(ArcNode));
        p->adjvex = i;
        p->nextarc = G.adjlist[j].firstarc;
        G.adjlist[j].firstarc = p;
    }

    // 初始化visit数组
    for (i = 0; i < G.n; i++) {
        visit[i] = 0;
    }

    printf("深度优先搜索结果:");
    dfs(&G, 0); // 从节点0开始深度优先搜索

    return 0;
}

可以看到我在其中给出了测试用例。并且我还整理了pdf版方便大家打印查看,以上资料获取没有任何门槛!

再发一遍传送门:数据结构算法模板
以上代码均为了帮助大家理解,如果大家有更权威的代码模板,可以参照更权威版本。创作不易,给个小心心支持以下吧。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值