• 转载算法达人修炼营实践模板


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

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

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

      模板一

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

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

    1. /* 
    2. * 烟台大学未来工程师协会/CSDN俱乐部 算法达人修炼营 实践报告 
    3. * Copyright (c) 2011, 烟台大学计算机学院学生  
    4. * All rights reserved. 
    5. * 作    者:                               
    6. * 完成日期:         年       月        日 
    7. * 版 本 号:           
    8.  
    9. * 任务描述:针对线性表的采用顺序存储结构,实现两个基本操作 
    10. *   1. 构造空的线性表(InitList) 
    11. *   2. 遍历线性表(ListTraverse) 
    12. * 主要函数: 
    13. *   1. Status InitList(SqList &L) // 算法2.3  
    14. *   2. Status ListTraverse(SqList L, void(*visit)(ElemType *)) 
    15. */  
    16.   
    17. #include<stdio.h> //printf()等    
    18. #include<malloc.h> // malloc()等    
    19. #include<process.h> //exit()    
    20. #define OK 1    
    21. #define OVERFLOW -2    
    22. typedef int Status;    //Status是函数的类型,其值是函数结果状态代码,如OK等    
    23.   
    24. typedef int ElemType;  //ElemType是线性表中数据元素的类型,此处用int    
    25. #define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量,为方便测试,改为10    
    26.   
    27. typedef struct     
    28. {    
    29.     ElemType *elem; // 存储空间基址    
    30.     int length; // 当前长度    
    31.     int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)    
    32. }SqList;   
    33.    
    34.   
    35. // 算法2.3   
    36. // 操作结果:构造一个空的顺序线性表   
    37. Status InitList(SqList &L)    
    38. {      
    39.     L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));    
    40.     if(!L.elem)    
    41.         exit(OVERFLOW); // 存储分配失败    
    42.     L.length=0; // 空表长度为0    
    43.     L.listsize=LIST_INIT_SIZE; // 初始存储容量    
    44.     return OK;    
    45. }   
    46.   
    47.   
    48. void showData(ElemType *pe)  
    49. {  
    50.     printf("%d ", &pe);    
    51. }  
    52.    
    53. // 初始条件:顺序线性表L已存在   
    54. // 操作结果:依次对L的每个数据元素调用函数visit()。  
    55. //     visit()是一个指向函数的指针,适合针对不同元素类型选遍历中访问的基本操作  
    56. Status ListTraverse(SqList L, void(*visit)(ElemType *))  
    57. {  
    58.    ElemType *p;    
    59.     int i;    
    60.     p=L.elem;    
    61.     printf("线性表当前容量为: %d,", L.listsize);    
    62.     if (L.length>0)    
    63.     {    
    64.         printf("线性表中有 %d 个元素,分别是:",L.length);    
    65.         for(i=1;i<=L.length;i++)    
    66.             visit(p++);    
    67.     }    
    68.     else    
    69.         printf("目前还是空线性表。");    
    70.     printf(" ");    
    71.     return OK;    
    72. }    
    73.   
    74. int main()    
    75. {    
    76.     SqList La;    
    77.     Status i;    
    78.     i=InitList(La);    
    79.     ListTraverse(La,showData);    
    80.     return 0;    
    81. }     

    总结:

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

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

      模板二

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

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

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

    sqlist.cpp

    1. /* 
    2. * 烟台大学未来工程师协会/CSDN俱乐部 算法达人修炼营 实践报告 
    3. * Copyright (c) 2011, 烟台大学计算机学院学生  
    4. * All rights reserved. 
    5. * 作    者:                               
    6. * 完成日期:         年       月        日 
    7. * 版 本 号:           
    8.  
    9. * 任务描述:针对线性表的采用顺序存储结构,实现两个基本操作 
    10. *   1. 构造空的线性表(InitList) 
    11. *   2. 遍历线性表(ListTraverse) 
    12. * 主要函数: 
    13. *   1. Status InitList(SqList &L) // 算法2.3  
    14. *   2. Status ListTraverse(SqList L, void(*visit)(ElemType *)) 
    15. */  
    16. #include"sqlist.h"   //自定义的头文件(见后),将作为这一组实践的公共头文件  
    17. #include<stdio.h> //printf()等    
    18. #include<malloc.h> // malloc()等    
    19. #include<process.h> //exit()    
    20.   
    21. // 算法2.3   
    22. // 操作结果:构造一个空的顺序线性表   
    23. Status InitList(SqList &L)    
    24. {      
    25.     L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));    
    26.     if(!L.elem)    
    27.         exit(OVERFLOW); // 存储分配失败    
    28.     L.length=0; // 空表长度为0    
    29.     L.listsize=LIST_INIT_SIZE; // 初始存储容量    
    30.     return OK;    
    31. }   
    32.   
    33.   
    34. void showData(ElemType *pe)  
    35. {  
    36.     printf("%d ", &pe);    
    37. }  
    38.    
    39. // 初始条件:顺序线性表L已存在   
    40. // 操作结果:依次对L的每个数据元素调用函数visit()。  
    41. //     visit()是一个指向函数的指针,适合针对不同元素类型选遍历中访问的基本操作  
    42. Status ListTraverse(SqList L, void(*visit)(ElemType *))  
    43. {  
    44.    ElemType *p;    
    45.     int i;    
    46.     p=L.elem;    
    47.     printf("线性表当前容量为: %d,", L.listsize);    
    48.     if (L.length>0)    
    49.     {    
    50.         printf("线性表中有 %d 个元素,分别是:",L.length);    
    51.         for(i=1;i<=L.length;i++)    
    52.             visit(p++);    
    53.     }    
    54.     else    
    55.         printf("目前还是空线性表。");    
    56.     printf(" ");    
    57.     return OK;    
    58. }    
    59.   
    60. int main()    
    61. {    
    62.     SqList La;    
    63.     Status i;    
    64.     i=InitList(La);    
    65.     ListTraverse(La,showData);    
    66.     return 0;    
    67. }     


    sqlist.h

    1. #ifndef SQLIST_H  
    2. #define SQLIST_H  
    3.   
    4. //定义必要的常量   
    5. #define LIST_INIT_SIZE 10  
    6. #define LISTINCREMENT 2  
    7.    
    8. // 函数结果状态代码  
    9. #define TRUE 1  
    10. #define FALSE 0  
    11. #define OK 1  
    12. #define ERROR 0  
    13. #define INFEASIBLE -1  
    14. #define OVERFLOW -2   
    1. //定义数据类型及存储结构   
    2. typedef int ElemType;  
    3. typedef int Status;   
    4. typedef struct  
    5. {  
    6.  int *elem;  
    7.  int length;  
    8.  int listsize;  
    9. }SqList;  
    1. //所有的基本操作  
    2. Status InitList(SqList *L);  
    3. Status DestroyList(SqList *L);  
    4. Status ClearList(SqList *L);  
    5. Status ListEmpty(SqList L);  
    6. Status ListLength(SqList L);  
    7. Status GetElem(SqList L, int i, ElemType *e);  
    8. int LocateElem(SqList L, ElemType e, Status(*compare)(ElemType, ElemType));  
    9. Status PriorElem(SqList L, ElemType cur_e, ElemType *pri_e);  
    10. Status NextElem(SqList L, ElemType cur_e, ElemType *next_e);  
    11. Status ListInsert(SqList *L, int i, ElemType e);  
    12. Status ListDelete(SqList *L, int i, ElemType *e);  
    13. Status ListTraverse(SqList L, void(*visit)(ElemType *));  
    14.    
    15. #endif  


    总结:

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

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

     

      模板三

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

      结语

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

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

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

  • 相关阅读:
    [Typescript] 73. Medium Join
    [Typescript] 74. Medium LastIndexOf
    Kotlin 朱涛15 协程 挂起函数 suspend CPS Continuation
    Kotlin 朱涛23 协程 异常 trycatch Exception
    Kotlin 朱涛21 协程 Select 选择最快的结果
    Kotlin 朱涛22 协程 并发 同步 Mutex Actor
    聊聊软件测试面试的一些事
    认知成长:聊聊专业性和职业性
    从技术专家到技术管理,我对管理的思考
    20192020:时间戳
  • 原文地址:https://www.cnblogs.com/6502ck/p/3997124.html
Copyright © 2020-2023  润新知