标签:des blog http io ar strong for 文件 数据
实践的成果要通过博文的形式发表,为自己的成长做记录,为大家的交流建平台。要重视这样一种形式。
“算法达人修炼营”实践作品博文标题中要体现数据结构、存储方式、实现基本操作等。例如,针对《给数据结构初学者:跨过算法和程序之间的鸿沟》的内容,标题应该是“线性表-顺序存储-初始化及遍历操作的实现”。了解算法达人训练营,见《C04-算法达人修炼营学习安排及方法指导》。
博文中要加入适当的注释,对齐、缩格排版等要做到。
模板一
将所有代码放在一个文件中,是编制小程序时的常用办法。
标题是“线性表-顺序存储-初始化及遍历操作的实现”的博文正文的内容可以是:
-
- #include<stdio.h> //printf()等
- #include<malloc.h> // malloc()等
- #include<process.h> //exit()
- #define OK 1
- #define OVERFLOW -2
- typedef int Status;
-
- typedef int ElemType;
- #define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量,为方便测试,改为10
-
- typedef struct
- {
- ElemType *elem;
- int length;
- int listsize;
- }SqList;
-
-
- Status InitList(SqList &L)
- {
- L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
- if(!L.elem)
- exit(OVERFLOW);
- L.length=0;
- L.listsize=LIST_INIT_SIZE;
- return OK;
- }
-
-
- void showData(ElemType *pe)
- {
- printf("%d ", &pe);
- }
-
- 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
- #include"sqlist.h" //自定义的头文件(见后),将作为这一组实践的公共头文件
- #include<stdio.h> //printf()等
- #include<malloc.h> // malloc()等
- #include<process.h> //exit()
-
- Status InitList(SqList &L)
- {
- L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
- if(!L.elem)
- exit(OVERFLOW);
- L.length=0;
- L.listsize=LIST_INIT_SIZE;
- return OK;
- }
-
-
- void showData(ElemType *pe)
- {
- printf("%d ", &pe);
- }
-
- 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就是你最好的成果积累了。
结语
理论学习、实践提高,交叉进行。
学贵有法,学法不一,人各有法。
祝同学们能在持续的学习实践中,不断获得新的体会和提高。
转载算法达人修炼营实践模板
标签:des blog http io ar strong for 文件 数据
原文地址:http://www.cnblogs.com/6502ck/p/3997124.html