“算法达人修炼营”实践作品展示模板

简介: 实践的成果要通过博文的形式发表,为自己的成长做记录,为大家的交流建平台。要重视这样一种形式。  “算法达人修炼营”实践作品博文标题中要体现数据结构、存储方式、实现基本操作等。例如,针对《给数据结构初学者:跨过算法和程序之间的鸿沟》的内容,标题应该是“线性表-顺序存储-初始化及遍历操作的实现”。了解算法达人训练营,见《C04-算法达人修炼营学习安排及方法指导》。  博文中要加入适当的注释,对

实践的成果要通过博文的形式发表,为自己的成长做记录,为大家的交流建平台。要重视这样一种形式。

  “算法达人修炼营”实践作品博文标题中要体现数据结构、存储方式、实现基本操作等。例如,针对《给数据结构初学者:跨过算法和程序之间的鸿沟》的内容,标题应该是“线性表-顺序存储-初始化及遍历操作的实现”。了解算法达人训练营,见《C04-算法达人修炼营学习安排及方法指导》。

  博文中要加入适当的注释,对齐、缩格排版等要做到。


  模板一

  将所有代码放在一个文件中,是编制小程序时的常用办法。

  标题是“线性表-顺序存储-初始化及遍历操作的实现”的博文正文的内容可以是:

/*
* 烟台大学未来工程师协会/CSDN俱乐部 算法达人修炼营 实践报告
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 作    者:                              
* 完成日期:         年       月        日
* 版 本 号:          

* 任务描述:针对线性表的采用顺序存储结构,实现两个基本操作
*   1. 构造空的线性表(InitList)
*   2. 遍历线性表(ListTraverse)
* 主要函数:
*	1. Status InitList(SqList &L) // 算法2.3 
*	2. Status ListTraverse(SqList L, void(*visit)(ElemType *))
*/

#include<stdio.h> //printf()等  
#include<malloc.h> // malloc()等  
#include<process.h> //exit()  
#define OK 1  
#define OVERFLOW -2  
typedef int Status;    //Status是函数的类型,其值是函数结果状态代码,如OK等  

typedef int ElemType;  //ElemType是线性表中数据元素的类型,此处用int  
#define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量,为方便测试,改为10  

typedef struct   
{  
	ElemType *elem; // 存储空间基址  
	int length; // 当前长度  
	int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)  
}SqList; 
 

// 算法2.3 
// 操作结果:构造一个空的顺序线性表 
Status InitList(SqList &L)  
{    
	L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));  
	if(!L.elem)  
		exit(OVERFLOW); // 存储分配失败  
	L.length=0; // 空表长度为0  
	L.listsize=LIST_INIT_SIZE; // 初始存储容量  
	return OK;  
} 


void showData(ElemType *pe)
{
	printf("%d ", &pe);  
}
 
// 初始条件:顺序线性表L已存在 
// 操作结果:依次对L的每个数据元素调用函数visit()。
//     visit()是一个指向函数的指针,适合针对不同元素类型选遍历中访问的基本操作
Status ListTraverse(SqList L, void(*visit)(ElemType *))
{
   ElemType *p;  
    int i;  
    p=L.elem;  
    printf("线性表当前容量为: %d,", L.listsize);  
    if (L.length>0)  
    {  
		printf("线性表中有 %d 个元素,分别是:",L.length);  
		for(i=1;i<=L.length;i++)  
			visit(p++);  
    }  
    else  
		printf("目前还是空线性表。");  
    printf("\n");  
    return OK;  
}  

int main()  
{  
    SqList La;  
    Status i;  
    i=InitList(La);  
    ListTraverse(La,showData);  
    return 0;  
}   
总结:

  掌握了用顺序表结构实现线性表中的初始化、遍历两种操作,更重要的是初步学会了将教材中描述的算法通过C语言写成程序的一般方法。(就知识点部结一二)

  原来算法学习可以这样进行。炼成算法达人,在路上,加油!(写点有助于提升成就感,让自己增强动力的话。)


  模板二

  当问题比较复杂时(代码行数也会增多),常常将代码分在多个文件中,即多文件组织,这种形式更普遍。

  一般做法是,常量、类型、函数的声明在一个头文件中,函数的实现放在另一个文件中。头文件中可以一次性地列出所有要实现的函数。

  标题是“线性表-顺序存储-初始化及遍历操作的实现”的博文正文的内容也可以是:

sqlist.cpp

/*
* 烟台大学未来工程师协会/CSDN俱乐部 算法达人修炼营 实践报告
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 作    者:                              
* 完成日期:         年       月        日
* 版 本 号:          

* 任务描述:针对线性表的采用顺序存储结构,实现两个基本操作
*   1. 构造空的线性表(InitList)
*   2. 遍历线性表(ListTraverse)
* 主要函数:
*	1. Status InitList(SqList &L) // 算法2.3 
*	2. Status ListTraverse(SqList L, void(*visit)(ElemType *))
*/
#include"sqlist.h"   //自定义的头文件(见后),将作为这一组实践的公共头文件
#include<stdio.h> //printf()等  
#include<malloc.h> // malloc()等  
#include<process.h> //exit()  

// 算法2.3 
// 操作结果:构造一个空的顺序线性表 
Status InitList(SqList &L)  
{    
	L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));  
	if(!L.elem)  
		exit(OVERFLOW); // 存储分配失败  
	L.length=0; // 空表长度为0  
	L.listsize=LIST_INIT_SIZE; // 初始存储容量  
	return OK;  
} 


void showData(ElemType *pe)
{
	printf("%d ", &pe);  
}
 
// 初始条件:顺序线性表L已存在 
// 操作结果:依次对L的每个数据元素调用函数visit()。
//     visit()是一个指向函数的指针,适合针对不同元素类型选遍历中访问的基本操作
Status ListTraverse(SqList L, void(*visit)(ElemType *))
{
   ElemType *p;  
    int i;  
    p=L.elem;  
    printf("线性表当前容量为: %d,", L.listsize);  
    if (L.length>0)  
    {  
		printf("线性表中有 %d 个元素,分别是:",L.length);  
		for(i=1;i<=L.length;i++)  
			visit(p++);  
    }  
    else  
		printf("目前还是空线性表。");  
    printf("\n");  
    return OK;  
}  

int main()  
{  
    SqList La;  
    Status i;  
    i=InitList(La);  
    ListTraverse(La,showData);  
    return 0;  
}   

sqlist.h

#ifndef SQLIST_H
#define SQLIST_H

//定义必要的常量 
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 2
 
// 函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2 

//定义数据类型及存储结构 
typedef int ElemType;
typedef int Status; 
typedef struct
{
 int *elem;
 int length;
 int listsize;
}SqList;

//所有的基本操作
Status InitList(SqList *L);
Status DestroyList(SqList *L);
Status ClearList(SqList *L);
Status ListEmpty(SqList L);
Status ListLength(SqList L);
Status GetElem(SqList L, int i, ElemType *e);
int LocateElem(SqList L, ElemType e, Status(*compare)(ElemType, ElemType));
Status PriorElem(SqList L, ElemType cur_e, ElemType *pri_e);
Status NextElem(SqList L, ElemType cur_e, ElemType *next_e);
Status ListInsert(SqList *L, int i, ElemType e);
Status ListDelete(SqList *L, int i, ElemType *e);
Status ListTraverse(SqList L, void(*visit)(ElemType *));
 
#endif

总结:

  掌握了用顺序表结构实现线性表中的初始化、遍历两种操作,更重要的是初步学会了将教材中描述的算法通过C语言写成程序的一般方法。(就知识点部结一二)

  原来算法学习可以这样进行。炼成算法达人,在路上,加油!(写点有助于提升成就感,让自己增强动力的话。)


  模板三

  在模板二的基础上,将测试的入口——main()函数放在独立的一个文件中,sqlist.h和sqlist.cpp就是你最好的成果积累了。


  结语

  理论学习、实践提高,交叉进行。

  学贵有法,学法不一,人各有法。

  祝同学们能在持续的学习实践中,不断获得新的体会和提高。



目录
相关文章
|
2月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
87 4
|
14天前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
100 30
|
18天前
|
存储 算法
深入解析PID控制算法:从理论到实践的完整指南
前言 大家好,今天我们介绍一下经典控制理论中的PID控制算法,并着重讲解该算法的编码实现,为实现后续的倒立摆样例内容做准备。 众所周知,掌握了 PID ,就相当于进入了控制工程的大门,也能为更高阶的控制理论学习打下基础。 在很多的自动化控制领域。都会遇到PID控制算法,这种算法具有很好的控制模式,可以让系统具有很好的鲁棒性。 基本介绍 PID 深入理解 (1)闭环控制系统:讲解 PID 之前,我们先解释什么是闭环控制系统。简单说就是一个有输入有输出的系统,输入能影响输出。一般情况下,人们也称输出为反馈,因此也叫闭环反馈控制系统。比如恒温水池,输入就是加热功率,输出就是水温度;比如冷库,
132 15
|
4月前
|
算法
【算法】前缀和——二维前缀和模板题
【算法】前缀和——二维前缀和模板题
|
2月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
2月前
|
机器学习/深度学习 人工智能 Rust
MindSpore QuickStart——LSTM算法实践学习
MindSpore QuickStart——LSTM算法实践学习
50 2
|
2月前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
37 0
|
3月前
|
数据采集 算法 物联网
【算法精讲系列】阿里云百炼SFT微调实践分享
本内容为您提供了百炼平台SFT微调的实践案例,帮助您方便并快速借助模型微调定制化您自己的专属模型。
|
4月前
|
DataWorks 算法 调度
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
49 1
下一篇
DataWorks