1、 node(); /构造函数 node(int initdata,node *initnext = NULL); /构造函数重载 /由于本处已经考虑新结点的链域为空,后面将全部不考虑这个问题 node(); /析构函数 int data; /数据域 node *next; /结点指针 /此处调用的对象本身,属于递归;node:node(int initdata,node *initnext)/* * 构造函数重载,用于非默认情况下的一种自定义node对象的生成方法。 */ data = initdata; next = initnext;/定义C+语言中知识点复习类对象class Cskill
2、study /定义一个功能类Cskillstudyprivate: node *headp; /链表的头结点指针 Cskillstudy(); /构造函数 Cskillstudy(); /析构函数 void exchange2nums(int &num1,int &num2); /数据交换函数 int addinteger(int num1,int num2); /两个整数相加并返回结果 void countnums(int array,int arraylenthnow,int &countpos,int &countneg,int &countzero); /统计正、负以及零的数据个数 v
3、oid getarraynums(int array,int &arrayposnow); /从键盘读取数组的数据 int accumulator(int array,int arraylenthnow); /整型数组中的数据累加 int factorial(int num); /阶乘运算,即累乘器multiplier int combinationnum(int m,int n); /组合数的计算 returninfo getmaxmin(int array,int arraylenthnow,int &max,int &min); /求多个整型数据的最大值和最小值 returninfo s
4、ort3nums(int &num2,int &num3); /三个整型数据的排序 returninfo processlinklist(int num1,int num2,int num3); /用三个结点构成一个链表 void displaylinklist(); /显示链表中的数据信息 void releaselinklist(); /清空链表数据并且回收空间 returninfo fileprocess(); /文件操作Cskillstudy:Cskillstudy() headp = new node; /申请新结点,作为头结点 headp-next = NULL; /头结点的地址域
5、预设为空地址,本构造函数结束后headp已经存在int Cskillstudy:addinteger(int num1,int num2) * 两个整数加法运算:除了学习最简单的加法器S=X+Y外,主要学习函数中多个数据作为参数 * 传进来,利用函数名把一个值的计算结果传回去的方法。 int result; result = num1 + num2;/加法器 return result;void Cskillstudy:countnums(int array,int arraylenthnow,int &countpos, int &countzero) * 分别统计出正数、负数、零的个数,学
6、习计数器C=C+1的使用,通过把数组中的一批数据 * 传入函数中,然后传回去统计结果在调用处显示。学习把数组存储的多个数据作为参数 * 传入,处理后把多个数据作为参数传出的函数关系,而文件名处可以用无参数返回类型。 countpos = 0;countneg = 0;countzero = 0; /所有数据种类计数器初始值清零 for(int arrayposnow = 1;arrayposnow 0) countpos=countpos+1;/计数器,可以简写为countpos+; else if(arrayarrayposnow countneg=countneg+1; else coun
7、tzero=countzero+1; accumulator(int array,int arraylenthnow) * 数组数据的累加:学习用循环结构控制数组数据的读取,学习累加器S=S+N, * 学习把数组名作为参数传进去,通过函数名返回一个计算结果。 int addresult = 0; addresult = addresult+arrayarrayposnow;/累加器 return addresult;factorial(int num) * 本函数学习C语言的阶乘运算,也是累乘器M=M*N int result = 1; for(int i = 1;i = num; i+) r
8、esult =result * i;/累乘器combinationnum(int n,int m)/* * 组合数的计算:从n个不同元素中,任取m(mn)个元素并成一组,叫做从n个不同元素中 * 取出m个元素的一个组合;其所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。 * 用符号c(n,m) 表示。学习多次调用同一个函数。 */ int cnm; if(nm | m 0 | n return -1;/此处约定用-1代表失败,因为使用了函数名来返回计算结果,故不能用fail返回 else cnm = factorial(n)/(factorial(m)*factorial(n-m);
9、 return cnm;returninfo Cskillstudy:getmaxmin(int array,int arraylenthnow,int &min) * 求多个数据的最大值和最小值:可以学习线性结构扫描式处理算法和循环结构的使用, * 熟练掌握求最大值和最小值的方法。多个数据返回时,文件名依然可以返回其他信息,如成功。 min = max = array1;/约定第一个数据为最初的最大值和最小值 for(int arrayposnow = 2; /技巧:初始值已经是1号单元的,所以从2号单元开始扫描 if(max min = arrayarrayposnow;/扫描完毕时,最小
10、值已存入min return success;sort3nums(int &num3) * 三个数据的排序:学习利用两个数据交换,掌握简单的排序思路。同时学习多个数据 * 传入和同样的数据量传出的函数程序设计技巧。 */ if(num1 num2) exchange2nums(num1, num2);/if语句只有一句可以写在一行 num3) exchange2nums(num1, num3);/数据量少的情况下的排序算法 if(num2 num3) exchange2nums(num2, num3);/虽然非通用,但是抽象后可以通用processlinklist(int num1,int n
11、um2,int num3) * 链表的三个结点的挂链和数据显示:学习结点的定义,用最原始的方式逐个挂上结点 * 来构造链表,然后启动通用的链表显示数据函数显示所有数据。 int num; node *newnodep; /*使用尾插法向链表插入数据,此段程序故意分步骤写出,如果把lastnodep先行定义,则和 下面两次增加数据统一,就可以用循环结构控制多个数据的挂链。其他的挂链构建链表法 包括头插法,一直挂在第一个位置上,还有保持排序插入构建法。效果均不同,根据需要选用*/ num=num1;/为了下面的语句统一以便后面抽象成循环结构控制挂链新的结点而转存一次 newnodep = new
12、node(num); /申请新的结点空间同时把数据存入结点数据域 headp-next = newnodep; /注意:headp在构造函数中已经设计好,所以此处直接使用 cout向链表尾部挂上新数据 num1next;/此处,故启用一个最后结点指针指向链表的最后一个结点 num=num2; lastnodep- lastnodep = newnodep;/num2 /*向链表插入第三个数据*/ num=num3; /下面没写lastnodep = newnodep;是因为三个数据已经结束num3fileprocess()/* * 文件(data.txt)中存入数量不等的整数,读入后用循环写入
13、链表,然后把链表所有 * 数据增加100,再写入数组,然后再把所有数据写入结果文件(result.txt)中。 * data.txt文件中的数据最后一项数据之后要求没有任何符号(包括空格符、换行符) * 否则系统就会默认数据没有读完,导致多读 */ node *searchp = headp; /*从文件(data.txt)中读入数量不等的整数*/ int count = 0; /读入数据个数计数器 ifstream in(data.txt); if(!in) return fail; int data; node *newnodep; coutdata; /读入数据 coutdata sea
14、rchp = newnodep; count=count+1; /计数器 endl while(searchp != NULL) searchp-data = searchp-data + 100; /全部链表数据同样处理的思路 searchp = searchp- /链表中指针向后移动的标准写法所有数据加上100的运算已经结束.运算结果如下: /*数据转入数组*/ int *temparray = new intcount,arrayposnow = 0; /高级技巧,申请一个动态数组 /这个数组故意使用了0单元,以区别上面的0单元空置 temparrayarrayposnow = sear
15、chp- arrayposnow+; / 标注 /上两句可以简写成:temparrayarrayposnow+ = searchp-请对比标注 数据已经转入数组. /*再把所有数据写入结果文件(result.txt)中*/ ofstream out(result.txtout) for(arrayposnow = 0; count; outtemparrayarrayposnow数据已经重新写入文件.打开文件中,请稍候. ShellExecute(NULL,open,NULL,NULL,SW_SHOWNORMAL); /*关闭文件流*/ in.close(); out.close();geta
16、rraynums(int array,int &arrayposnow) * 函数功能:向给定的数组中输入一定个数的数据,并返回数组数据和数据个数 int buffercache; /设置一个变量存储缓存区数据信息 int overcount = 0; /记录输入超界数据个数 arrayposnow = 0; /按照约定数组下标从1开始使用,但是此时初值依然设置为0请用空格分开一次输入多个整数,以ENDMARK标志结束输入,个数超过ARRAYMAXLENTH-1buffercache; /向缓存区输入一个数据 while(buffercache != ENDMARK) if(arrayposnow if(overcount 【重要提示】输入数据量越界,忽略后面overcount个数据,前 个数据依然有效。displaylinklist()形象化显示链表指针headp指向的链表全部数据信息 *
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1