1、问题定义

校园导游咨询

2、导游无向图设计:

3、编程框架设计:

4、菜单设计

printf(" ┌──────────────────────────────────────────────────────┐\n");
    printf(" │ ╭ ═══════════════════════════════════════════════ ╮  │\n");
    printf(" │ ││        欢 迎 使 用 校 园 导 游 系 统          ││  │\n");
    printf(" │ ╰ ═══════════════════════════════════════════════ ╯  │\n");
    printf(" │                      欢迎来到                        │\n");
    printf(" │                  江 苏 科 技 大 学                   │\n");
    printf(" │                      菜   单                         │\n");
    printf(" │  *************************************************** │\n");
    printf(" │  *  1.主菜单              **   2.学校地图          * │\n");
    printf(" │  *************************************************** │\n");
    printf(" │  *  3.学校景点介绍        **   4. 查看游览路线     * │\n");
    printf(" │  *************************************************** │\n");
    printf(" │  *  5.查询景点间最短路径  **   0.退出              * │\n");
    printf(" │  *************************************************** │\n");
    printf(" └──────────────────────────────────────────────────────┘\n");

5、地图初始化

typedef struct mapstr//图结构信息
{
    vetinf vets[MaxNumber];//顶点数组
    wetmatrix mat;//邻接矩阵
    int vetnum, sidenum;
}mapstr;
mapstr campus;//图结构变量(学校校园)
int d[30];
int visited[50];
int shortest[MaxNumber][MaxNumber];//定义全局变量存储最小路径
int pathh[MaxNumber][MaxNumber];//定义存储路径
mapstr initmap()
{
    mapstr m;
    int i = 0, j = 0;
    m.vetnum = 18;//定义顶点个数
    m.sidenum = 25;//定义边的条数
    for (i = 1; i <= vertex; i++)//依次设置顶点信息
        m.vets[i].number = i;
    strcpy(m.vets[1].name, "北门"); strcpy(m.vets[1].intro, "位于学校最北端,位于长香路");
    strcpy(m.vets[2].name, "北苑食堂"); strcpy(m.vets[2].intro, "教职工餐厅");
    strcpy(m.vets[3].name, "梦溪园"); strcpy(m.vets[3].intro, "学院楼附近的公园,适合散步");
    strcpy(m.vets[4].name, "计院楼"); strcpy(m.vets[4].intro, "各个学院的办公室,实验室等");
    strcpy(m.vets[5].name, "海韵湖"); strcpy(m.vets[5].intro, "海韵湖边还有环湖跑道");
    strcpy(m.vets[6].name, "文理大楼"); strcpy(m.vets[6].intro, "文理大楼,长山校区的标志性建筑");
    strcpy(m.vets[7].name, "图书馆"); strcpy(m.vets[7].intro, "我们平时自习和借阅图书的地方");
    strcpy(m.vets[8].name, "求索园"); strcpy(m.vets[8].intro, "在这里可以欣赏到学校的一处优美的景色");
    strcpy(m.vets[9].name, "明德楼"); strcpy(m.vets[9].intro, "明德楼和经世楼,我们平时上课的地方之一");
    strcpy(m.vets[10].name, "东苑食堂"); strcpy(m.vets[10].intro, "位于学校东片区的食堂");
    strcpy(m.vets[11].name, "笃学楼"); strcpy(m.vets[11].intro, "平时上课的地方之一");
    strcpy(m.vets[12].name, "西苑食堂"); strcpy(m.vets[12].intro, "位于学校西片区的食堂");
    strcpy(m.vets[13].name, "西区操场"); strcpy(m.vets[13].intro, "平时上体育课的地方");
    strcpy(m.vets[14].name, "东区宿舍"); strcpy(m.vets[14].intro, "位于学校东片区的宿舍区");
    strcpy(m.vets[15].name, "西区宿舍"); strcpy(m.vets[15].intro, "位于学校西片区的宿舍区");
    strcpy(m.vets[16].name, "文体中心"); strcpy(m.vets[16].intro, "体育馆和报告厅");
    strcpy(m.vets[17].name, "东区操场"); strcpy(m.vets[17].intro, "学校的另一个操场");
    strcpy(m.vets[18].name, "南门"); strcpy(m.vets[18].intro, "学校的正门");

for (i = 1; i <= vertex; i++)
        for (j = 1; j <= vertex; j++)
            m.mat[i][j].weight = Infinity;//初始化图的邻接矩阵
    m.mat[1][2].weight = 200; m.mat[1][3].weight = 300; m.mat[2][5].weight = 300; m.mat[2][10].weight = 500; m.mat[3][4].weight = 200;
    m.mat[3][5].weight = 150; m.mat[3][11].weight = 350; m.mat[4][6].weight = 200; m.mat[5][7].weight = 100; m.mat[6][8].weight = 100;
    m.mat[7][10].weight = 200; m.mat[7][11].weight = 200; m.mat[8][9].weight = 200; m.mat[8][11].weight = 250; m.mat[9][13].weight = 100;
    m.mat[10][14].weight = 100; m.mat[11][13].weight = 250; m.mat[11][17].weight = 250; m.mat[12][13].weight = 150; m.mat[12][15].weight = 150;
    m.mat[13][16].weight = 100; m.mat[14][17].weight = 150; m.mat[15][16].weight = 350; m.mat[16][18].weight = 250; m.mat[17][18].weight = 300;
    for (i = 1; i <= vertex; i++)//无向带权图是对称矩阵,给其另一半赋值
        for (j = 1; j <= vertex; j++)
            m.mat[j][i].weight = m.mat[i][j].weight;
    return m;
}//图的初始化

6.功能完善,补全代码

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define _CRT_SECURE_NO_DEPRECATE
#define Infinity 65535    //表示无穷大
#define MaxNumber 25    //用于邻接矩阵
#define vertex 18    //顶点个数
typedef struct side//边的权值
{
    int weight;//权值
}side, wetmatrix[MaxNumber][MaxNumber];//边的邻接矩阵类型
typedef struct vetinf//顶点信息
{
    int number;//顶点编号
    char name[64];//顶点名称
    char intro[256];//顶点介绍
}vetinf;
typedef struct mapstr//图结构信息
{
    vetinf vets[MaxNumber];//顶点数组
    wetmatrix mat;//邻接矩阵
    int vetnum, sidenum;
}mapstr;
mapstr campus;//图结构变量(学校校园)
int d[30];
int visited[50];
int shortest[MaxNumber][MaxNumber];//定义全局变量存储最小路径
int pathh[MaxNumber][MaxNumber];//定义存储路径
mapstr initmap()
{
    mapstr m;
    int i = 0, j = 0;
    m.vetnum = 18;//定义顶点个数
    m.sidenum = 25;//定义边的条数
    for (i = 1; i <= vertex; i++)//依次设置顶点信息
        m.vets[i].number = i;
    strcpy(m.vets[1].name, "北门"); strcpy(m.vets[1].intro, "位于学校最北端,位于长香路");
    strcpy(m.vets[2].name, "北苑食堂"); strcpy(m.vets[2].intro, "教职工餐厅");
    strcpy(m.vets[3].name, "梦溪园"); strcpy(m.vets[3].intro, "学院楼附近的公园,适合散步");
    strcpy(m.vets[4].name, "学院楼"); strcpy(m.vets[4].intro, "各个学院的办公室,实验室等");
    strcpy(m.vets[5].name, "海韵湖"); strcpy(m.vets[5].intro, "海韵湖边还有环湖跑道");
    strcpy(m.vets[6].name, "文理大楼"); strcpy(m.vets[6].intro, "文理大楼,长山校区的标志性建筑");
    strcpy(m.vets[7].name, "图书馆"); strcpy(m.vets[7].intro, "我们平时自习和借阅图书的地方");
    strcpy(m.vets[8].name, "求索园"); strcpy(m.vets[8].intro, "在这里可以欣赏到学校的一处优美的景色");
    strcpy(m.vets[9].name, "明德楼"); strcpy(m.vets[9].intro, "明德楼和经世楼,我们平时上课的地方之一");
    strcpy(m.vets[10].name, "东苑食堂"); strcpy(m.vets[10].intro, "位于学校东片区的食堂");
    strcpy(m.vets[11].name, "笃学楼"); strcpy(m.vets[11].intro, "平时上课的地方之一");
    strcpy(m.vets[12].name, "西苑食堂"); strcpy(m.vets[12].intro, "位于学校西片区的食堂");
    strcpy(m.vets[13].name, "西区操场"); strcpy(m.vets[13].intro, "平时上体育课的地方");
    strcpy(m.vets[14].name, "东区宿舍"); strcpy(m.vets[14].intro, "位于学校东片区的宿舍区");
    strcpy(m.vets[15].name, "西区宿舍"); strcpy(m.vets[15].intro, "位于学校西片区的宿舍区");
    strcpy(m.vets[16].name, "文体中心"); strcpy(m.vets[16].intro, "体育馆和报告厅");
    strcpy(m.vets[17].name, "东区操场"); strcpy(m.vets[17].intro, "学校的另一个操场");
    strcpy(m.vets[18].name, "南门"); strcpy(m.vets[18].intro, "学校的正门");

for (i = 1; i <= vertex; i++)
        for (j = 1; j <= vertex; j++)
            m.mat[i][j].weight = Infinity;//初始化图的邻接矩阵
    m.mat[1][2].weight = 200; m.mat[1][3].weight = 300; m.mat[2][5].weight = 300; m.mat[2][10].weight = 500; m.mat[3][4].weight = 200;
    m.mat[3][5].weight = 150; m.mat[3][11].weight = 350; m.mat[4][6].weight = 200; m.mat[5][7].weight = 100; m.mat[6][8].weight = 100;
    m.mat[7][10].weight = 200; m.mat[7][11].weight = 200; m.mat[8][9].weight = 200; m.mat[8][11].weight = 250; m.mat[9][13].weight = 100;
    m.mat[10][14].weight = 100; m.mat[11][13].weight = 250; m.mat[11][17].weight = 250; m.mat[12][13].weight = 150; m.mat[12][15].weight = 150;
    m.mat[13][16].weight = 100; m.mat[14][17].weight = 150; m.mat[15][16].weight = 350; m.mat[16][18].weight = 250; m.mat[17][18].weight = 300;
    for (i = 1; i <= vertex; i++)//无向带权图是对称矩阵,给其另一半赋值
        for (j = 1; j <= vertex; j++)
            m.mat[j][i].weight = m.mat[i][j].weight;
    return m;
}//图的初始化

int locatevet(mapstr m, int v)
{
    int i;
    for (i = 0; i <= m.vetnum; i++)
        if (v == m.vets[i].number) return i;//找到返回顶点i
    return -1;
}//查询景点在图中的序号

void path(mapstr m, int l, int n, int k)
{
    int s, t = k + 1; int length = 0;//t用于存储路径上下一顶点对应的d[]数组元素的下标
    if (d[k] == n && k < 8)//若d[k]是终点且景点个数<8,则输出该路径
    {
        for (s = 0; s < k; s++)
        {
            length = length + m.mat[d[s]][d[s + 1]].weight;
        }
        if (length < 2000)
        {
            for (s = 0; s < k; s++)//输出该路径,s=0时为起点m
            {
                printf("%d%s--->", m.vets[d[s]].name);
            }
            printf("%d%s  ", m.vets[d[s]].name);//输出最后一个顶点
            printf("总路线长为%d米\n\n", length);
        }
    }
    else
    {
        s = 1;
        while (s <= m.vetnum)//从第m个顶点,访问所有顶点是否有路径
        {
            if ((m.mat[d[k]][s].weight < Infinity) && (visited[s] == 0))//顶点有边且未被访问
            {
                visited[s] = 1;
                d[k + 1] = s;//存储顶点编号
                path(m, l, n, t);
                visited[s] = 0;//将找到的路径上的顶点的访问标志重新设置为,便于探究新的路径
            }
            s++;//试验下一顶点s开始是否有到终点的路径;
        }
    }
}//查询输入序号l,n间的长度不超过10个景点的路径
void shortestpath(mapstr m)
{
    int v0, i, j, k = 1, min, t, p;
    int final[MaxNumber];//final[w]=1表示已经求得顶点V0到Vw的的最短路径
    int Pathside[MaxNumber];//用于存储最短路径下标的数组
    int ShortPathwet[MaxNumber];//用于存储到各点最短路径的权值和
    printf("\n请输入起始景点的编号:");
    scanf("%d", &v0);
    printf("\n");
    while (v0<0 || v0>vertex)//判断是否输入正确
    {
        printf("\n您输入的景点编号不存在\n");
        printf("请重新输入:");
        scanf("%d", &v0);
    }
    for (i = 1; i <= m.vetnum; i++)//数组初始化
    {
        final[i] = 0;//全部顶点初始化为未找到路径
        ShortPathwet[i] = m.mat[v0][i].weight;//将与v0有连线的路径加上权值
        Pathside[i] = 0;//初始化路径数组为0
    }
    ShortPathwet[v0] = 0;
    final[v0] = 1;

for (i = 1; i <= m.vetnum; i++)
    {
        min = Infinity;
        for (j = 1; j <= m.vetnum; j++)//找出离当前指向顶点最近的点
        {
            if (!final[j] && ShortPathwet[j] < min)//未被访问且存在边
            {
                k = j;
                min = ShortPathwet[j];
            }
        }
        final[k] = 1;//将找到的离当前顶点最近的置1
        for (j = 1; j <= m.vetnum; j++)
        {
            if (!final[j] && (min + m.mat[k][j].weight < ShortPathwet[j]))
            {
                ShortPathwet[j] = min + m.mat[k][j].weight;//修改当前最优路径长度
                Pathside[j] = k;//存放前驱结点
            }
        }
    }//Dijkstr算法主体

for (t = 1; t <= m.vetnum; t++)
    {
        p = t;
        if (t != v0)
        {
            printf("%d%s", t, m.vets[t].name);
            for (j = 2; j <= m.vetnum; j++)
            {
                if (Pathside[p] != 0)
                {
                    printf("<--%d%s", Pathside[p], m.vets[p].name);
                    p = Pathside[p];
                }
            }
            printf("<--%d%s", v0, m.vets[v0].name);
            printf("\n总路线长为%d米\n\n", ShortPathwet[t]);
        }
    }
}//迪杰斯特拉算法求单源最短路径

void menu()
{
    printf(" ┌──────────────────────────────────────────────────────┐\n");
    printf(" │ ╭ ═══════════════════════════════════════════════ ╮  │\n");
    printf(" │ ││        欢 迎 使 用 校 园 导 游 系 统          ││  │\n");
    printf(" │ ╰ ═══════════════════════════════════════════════ ╯  │\n");
    printf(" │                      欢迎来到                        │\n");
    printf(" │                  江 苏 科 技 大 学                   │\n");
    printf(" │                      菜   单                         │\n");
    printf(" │  *************************************************** │\n");
    printf(" │  *  1.主菜单              **   2.学校地图          * │\n");
    printf(" │  *************************************************** │\n");
    printf(" │  *  3.学校景点介绍        **   4. 查看游览路线     * │\n");
    printf(" │  *************************************************** │\n");
    printf(" │  *  5.查询景点间最短路径  **   0.退出              * │\n");
    printf(" │  *************************************************** │\n");
    printf(" └──────────────────────────────────────────────────────┘\n");
}//主页

void printmapstr(mapstr m)
{
    int i, j, k = 0;
    for (i = 1; i <= vertex; i++)
    {
        if (m.vets[i].number != -1)
            printf("%6d", i);
    }
    printf("\n");
    for (i = 1; i <= m.vetnum; i++)
    {
        for (j = 1; j <= m.vetnum; j++)
        {
            if (m.mat[i][j].weight == Infinity)
                printf(" **** ");
            else
                printf("%6d", m.mat[i][j].weight);
            k++;
            if (k % m.vetnum == 0)
                printf("\n");
        }
    }
}//输出图的邻接矩阵的值
void floyd(mapstr m)
{
    int i, j, k;
    for (i = 1; i <= vertex; i++)//将图的邻接矩阵赋值给 shortest二维数组,将矩阵pathh全部初始化为-1
    {
        for (j = 1; j <= vertex; j++)
        {
            shortest[i][j] = m.mat[i][j].weight;
            pathh[i][j] = j;
        }
    }
    printf("\n");
    for (k = 1; k <= vertex; k++)//核心操作,完成了以k为中间点对所有的顶点对(i,j)进行检测和修改
    {
        for (i = 1; i <= vertex; i++)
        {
            for (j = 1; j <= vertex; j++)
            {
                if (shortest[i][j] > shortest[i][k] + shortest[k][j])
                {
                    shortest[i][j] = shortest[i][k] + shortest[k][j];
                    pathh[i][j] = pathh[i][k];//记录一下所走的路 //P数组用来存放前驱顶点  
                }
            }
        }
    }
}//floyd算法
void display(mapstr m, int i, int j)
{
    int a, b;
    a = i, b = j;
    printf("您要查询的两景点为%s和%s\n", m.vets[a].name, m.vets[b].name);
    printf("其最短路径参考如下:\n\n");
    printf("%d%s", a, m.vets[a].name);
    while (pathh[i][j] != b)
    {
        printf("-->%d%s", pathh[i][j], m.vets[pathh[i][j]].name);
        i = pathh[i][j];
    }
    printf("-->%d%s\n\n", b, m.vets[b].name);
    printf("%s-->%s的最短路程为:%d米\n\n", m.vets[a].name, m.vets[b].name, shortest[a][b]);
}//输出最短路径

int shortdistance(mapstr m)
{
    int i, j;
    printf("请输入要查询的两个景点的数字编号(用空格隔开)\n");
    scanf("%d %d", &i, &j);
    while (i<0 || i>vertex || j<0 || j>vertex)
    {
        printf("输入信息有误!\n\n");
        printf("请输入要查询的两个景点的数字编号(用空格隔开)\n");
        scanf("%d %d", &i, &j);
    }
        floyd(m);
        display(m, i, j);
    return 1;
}//任意两点间距离

void compusinfor(mapstr m)
{
    int i;
    printf(" \n\n编号     景点名称                        简介\n");
    printf("*************************************************************************\n");
    for (i = 1; i <= vertex; i++)
    {
        if (m.vets[i].number != -1)
            printf("%-10d%-25s%-70s\n", m.vets[i].number, m.vets[i].name, m.vets[i].intro);
    }
    printf("*************************************************************************\n");
}//显示所有景点信息
void schoolmap()
{
    printf(" -------------------------------江苏科技大学简易地图--------------------------------------\n");
    printf("```````````````````````````````````````````````北门```````````````````````````````````````\n");
    printf("``````````````````````````````````````````````````````北苑食堂````````````````````````````\n");
    printf("``````````````````````````````````梦溪园``````````````````````````````````````````````````\n");
    printf("```````````````````````学院楼````````````````海韵湖```````````````````````````````````````\n");
    printf("``````````````````文理大楼```````````````````图书馆```````````````````````````````````````\n");
    printf("```````````````````求索园`````````````````````````````````````````````````````````````````\n");
    printf("`````````````明德楼``````````````````````````````````````````````东苑食堂`````````````````\n");
    printf("``````````````````````````````````````笃学楼``````````````````````````````````````````````\n");
    printf("`````````西苑食堂`````西区操场`````````````````````````````````````东区宿舍```````````````\n");
    printf("西区宿舍``````````````文体中心```````````````````````东区操场`````````````````````````````\n");
    printf("````````````````````````````````````````南门``````````````````````````````````````````````\n");
    printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t                                            西<---|--->东     \n");
}

int main()
{
    menu();
    int choice;
    campus = initmap();
    do
    {
        printf("请输入你的选择(输入1回到主菜单):\n");
        scanf("%d", &choice);
        switch (choice)
        {
        case 1:system("cls"); menu(); break;
        case 2:system("cls"); schoolmap(); break;
        case 3:system("cls"); compusinfor(campus); break;
        case 4:system("cls"); shortestpath(campus); break;
        case 5:system("cls"); shortdistance(campus); break;
        case 0:system("cls"); printf("谢谢使用\n"); break;
        default:printf("未找到该功能,请输入有效选项!\n"); break;
        }
    } while (choice); menu();
}//主界面

7、结果展示

江苏科技大学 数据结构课设相关推荐

  1. 那些年,我的数据结构课设,现在满满的回忆!(现如今身处内卷之中,已经很难出现当初那份乐趣了)

    一.看到这个图标很有感觉 距离当初完成数据结构课设已经过去很久很久了,当初由于U盘失踪,也丢失了很多宝贵的东西,我也伤心的好久`(>﹏<)′!不过最近找到了失散多年的亲兄弟,打开U盘,感概 ...

  2. 南京航空航天大学2020数据结构课设

    南京航空航天大学2020数据结构课设 目录 1.系统进程设计 2.迷宫问题 3.家谱管理系统 4.Huffman编码与解码 5.地铁修建 6.公交线路提示 7.B-树应用 8.排序算法比较 9.数字排 ...

  3. 学生搭配问题数据结构报告c语言,数据结构课设学生搭配问题

    数据结构课设学生搭配问题 数 据 结 构 课程设计报告书 班级 学号 专业 姓名 课题描述: 一. 需求分析: 1. 设计内容 一班有m个女生,有n个男生(m不等于n),现要开一个舞会. 男女生分别编 ...

  4. 数据结构课设_网页形式的景区导游

    一.前言 欢迎大家来到这里~~ 1.这次数据结构课设,笔者的题目是网页形式的导航系统. 2.数据结构方面应用了链表存储商品信息.图来存储景点和路径信息.在图的广度优先中还用到了队列: 3.具体的算法有 ...

  5. 神秘国度的爱情故事 数据结构课设-广州大学

    神秘国度的爱情故事 数据结构课设-广州大学 ps:本次课设程序不仅需要解决问题,更需要注重代码和算法的优化和数据测试分析      直接广度优先实现的方法时间复杂度为O(QN),优化后的方法是lca+ ...

  6. 模拟浏览器操作程序(数据结构课设)

    文章目录 前言 一.题目 二.系统设计 2.1 功能模块图 2.2 主要功能函数 三.问题分析 四.实验结果及分析 五.源码 总结 前言 20级cqut的别抄! 一.题目  模拟浏览器操作程序:标准的 ...

  7. 背包问题求解(数据结构课设)

    文章目录 前言 一.题目 二.功能模块图 三.问题分析 四.实验结果及分析 五.源码 总结 前言 20级cqut的别抄! 一.题目  背包问题的求解:假设有一个能装入总体积为T的背包和n件体积分别为w ...

  8. 华南农业大学课设——数据结构课设、Java课设、操作系统课设

    文章目录 缘起 大二上-数据结构课设(高校教学管理系统)-C++.Qt 视频演示 感想 大二下-Java课设(流程图绘制程序)-JavaFX 视频演示 感想 大三上-操作系统课设(模拟磁盘文件系统实现 ...

  9. 数据结构课设——汉诺塔游戏演示

    源代码下载地址:数据结构课设--汉诺塔游戏演示 一. 问题描述 汉诺塔游戏问题中的数据元素具有如下形式: lchild:左孩子结点 rchild:右孩子结点 num:该移动步骤需要移动的盘子的编号 s ...

最新文章

  1. Python再夺冠,上古语言COBOL大流行,IEEE Spectrum 2020年度编程语言排行榜出炉!...
  2. springboot超详细教程_全网最细致的SpringBoot实战教程,超适合新手小白入坑学习...
  3. 随笔 | 抢红包不是一件小事
  4. TreeMap源码分析,看了都说好
  5. Android Studio 单刷《第一行代码》系列 06 —— Fragment 生命周期
  6. ZooKeeper学习:CentOS7下ZooKeeper集群搭建
  7. VScode 汉化以及侧栏npm脚本显示
  8. STM32震动感应控制继电器(使用循环VS使用外部中断EXTI和中断控制器NVIC)
  9. python回归结果可视化图表解读_一个基于可视化理论的完美Python图表,快学起来
  10. Windows XP Nlite 2007珍藏版 BY 丘比特
  11. win10登陆界面如何截屏
  12. 上市只是开端,库客音乐用版权打出组合拳
  13. 方舟服务器在线人数查询软件,方舟生存进化怎么查看在线人数
  14. [error]: Found option without preceding group in config file ....\my.ini at line:1
  15. 阿里P8整理Mysql面试题答案,助你面试“脱颖而出”
  16. ensp查看历史配置命令_华为路由查看配置命令是什么?
  17. 21版本FL Studio水果音乐制作软件下载
  18. python彩虹蛇_一亿年前巨蟒沃那比蛇一口能吞噬恐龙,沃那比蛇灭绝原因
  19. 大话设计模式系列目录
  20. js中奖人员向上滚动或者文章标题向上滚动 无缝衔接

热门文章

  1. 微信公众平台与百度轻应用使用对比
  2. geoserver三维_cesium结合geoserver实现地图空间查询(附源码下载)
  3. Qz学算法-数据结构篇(引入)
  4. 吐血整理50家企业真实大数据面试题!!学长实测,真实面试!!快收藏!
  5. 红蜻蜓利用档案数字化管理,实现业务管理降本增效
  6. 解决M1芯片Mac版Maxon Cinema 4D R23 安装不上问题 Mac M1 C4DM1中文直装版安装教程 支持MAC M1芯片处理器
  7. 东莞理工学院计算机学院转专业,东莞理工学院学生在校期间是否允许转专业
  8. “新工科”爆红!留学选专业这些专业一定要看
  9. linux移动硬盘unmount报错处理
  10. 从操作系统历史看为什么要有多进程和文件操作?