电子科技大学软件技术基础顺序表.docx
《电子科技大学软件技术基础顺序表.docx》由会员分享,可在线阅读,更多相关《电子科技大学软件技术基础顺序表.docx(14页珍藏版)》请在冰豆网上搜索。
电子科技大学软件技术基础顺序表
软件技术基础上机实验报告
罗子建2016010902012
上机实验一
1.1
一、程序流程说明——有条理的文字或流程图*
二、程序代码
#include
#include"stdafx.h"
#defineMAXNUM20
#definetrue1
#definefalse0
typedefstruct
{
intdata[MAXNUM];
intlength;
}list_type;
/*createalist:
inputdatafromkeyboard,endby-1*/
voidcreatelist(list_type*lp)
inti,elem;
lp->length=0;
printf("\npleaseinputdatasofthelist\n");
for(i=0;i{scanf_s("%d",&elem);if(elem==-1)break;lp->data[i]=elem;lp->length++;}}voidshowlist(list_type*lp){inti;printf("\nThese%drecordsare:\n",lp->length);if(lp->length<=0){printf("Nodata!\n");return;}for(i=0;ilength;i++)printf("%d",lp->data[i]);printf("\nlengthofthelistis:%d",lp->length);}intinsertlist(list_type*lp,intnew_elem,inti){intj;if(lp->length>=MAXNUM){printf("thelistisfull,cannotinsert.");return(false);}if(i<1||i>lp->length+1){printf("\n%disinvalidvalue",i);return(false);}for(j=lp->length;j>=i-1;j--){lp->data[j]=lp->data[j-1];}lp->data[i-1]=new_elem;//放入新元素;lp->length++;//表长度增加;return(true);}intdeletelist(list_type*lp,inti){intj;if(i<1||i>lp->length){printf("elemnotexist");return(false);}for(j=i;jlength;j++){lp->data[j-1]=lp->data[j];}lp->length--;//表长度减少;return(true);}list_typedelete_negative(list_type*lp){inti;intj=lp->length;while(j>0){if(lp->data[j]<0){for(i=j;ilength;i++){lp->data[i]=lp->data[i+1];}lp->length--;}j--;}return*lp;}voidmain(){list_typelist;inti,new_elem;createlist(&list);showlist(&list);printf("\ninsert:Enterdataandi:\n");scanf_s("%d%d",&new_elem,&i);insertlist(&list,new_elem,i);printf("\nlistafterinsert:\n");showlist(&list);printf("\ndelete:Enteri:\n");scanf_s("%d",&i);deletelist(&list,i);printf("\nlistafterdelete:\n");showlist(&list);delete_negative(&list);printf("\nlistafterdeleteallnegative:\n");showlist(&list);} 三、测试数据pleaseinputdatasofthelist87654321-5-4-3-2-1These12recordsare:87654321-5-4-3-2lengthofthelistis:12insert:Enterdataandi:55listafterinsert:These13recordsare:876554321-5-4-3-2lengthofthelistis:13delete:Enteri:1listafterdelete:These12recordsare:76554321-5-4-3-2lengthofthelistis:12listafterdeleteallnegative:These7recordsare:7655432lengthofthelistis:7请按任意键继续...四、上机时遇到的问题(可分为编译问题和逻辑问题)编译问题:对于顺序表的length定义仍不清楚,对于我们之前申明的顺序表内存依旧存在,但是length会做相应的变化。解决:对于showlist函数的调用,对于delete的使用没有影响,要回顾顺序表知识点,做到对于基本函数的调用运用熟练。逻辑问题:顺序表的添加删减运算,经常处理不好尾值得定义。解决:多使用调试的工具,直接接触内存,回到最本质。五、实际运行结果:六、小结体会:对于顺序表的操作,确实需要深刻理解末位元素的增删操作,以及要好好利用length这一个变量。通过深入学习调试的手段,对于内存的变化,我对于编程的感觉似乎来了,感觉好好弥补了大一上的c语言的坑,感觉基础得到了很大的巩固。 1.2一程序流程说明——有条理的文字或流程图*二程序代码#include#include#include"stdafx.h"#definetrue1#definefalse0#defineMAXNUM50typedefstruct{intdata[MAXNUM];intlength;}list_type;list_typecreate_list(list_type*lp){inti;intelenum;intm;lp->length=0;printf("请输入n个数\n");printf("n:");scanf_s("%d",&elenum);printf("请依次输入");for(i=0;i{scanf_s("%d",&m);lp->data[i]=m;lp->length++;}return*lp;}list_typeinsertlist(list_type*lp,intx){intm=lp->length;inti=lp->length;intj;while(m>0){if(lp->data[m]>x){i--;}m--;}for(j=lp->length;j>i;j--){lp->data[j]=lp->data[j-1];}lp->data[j]=x;lp->length++;return*lp;}list_typedelete_negative(list_type*lp){inti;intm;inta=0;for(i=0;ilength;i++){if(lp->data[i]<0)a++;}for(m=0;m{lp->data[m]=lp->data[m+a];}for(i=0;i{lp->length--;}return*lp;}voidshowlist(list_type*lp){inti;printf("\nThese%drecordsare:\n",lp->length);if(lp->length<=0){printf("Nodata!\n");return;}for(i=0;ilength;i++)printf("%d",lp->data[i]);printf("\nlengthofthelistis:%d",lp->length);} intmain(){intx;list_typelist;list=create_list(&list);printf("建立的顺序表如下");showlist(&list);printf("\n输入的x的值:");scanf_s("%d",&x);insertlist(&list,x);printf("新增元素的顺序表如下");showlist(&list);delete_negative(&list);printf("删去负数的顺序表如下");showlist(&list);}三测试数据请输入n个数n:5请依次输入-5-1247建立的顺序表如下These5recordsare:-5-1247lengthofthelistis:5输入的x的值:0新增元素的顺序表如下These6recordsare:-5-10247lengthofthelistis:6删去负数的顺序表如下These4recordsare:0247lengthofthelistis:4请按任意键继续... 四、上机时遇到的问题(可分为编译问题和逻辑问题)编译问题:申请了很多的变量。解决:应该要做到算法的优化设计。逻辑问题:对于删减顺序表中负数元素,如何做到优化,我当时的蛮力就是多次调用delete函数。解决:实际上该顺序表属于递增有序的,我们只要找到多少个负数元素就好,然后对于顺序表数据元素直接搬移多少个单位就好。 五、实际运行结果:六、小结体会:本次编写,较上次编写速度提升较快,说明多去练习调试对于编程语句的理解很有帮助,长期坚持下去,一定能够把编程能力训练扎实。 1.3一程序流程说明——有条理的文字或流程图*二程序代码#include#include#include"stdafx.h"#defineMAXNUM50#definetrue1#definefalse0typedefstruct{intdata[MAXNUM];intlength;}list_type;list_typecreate_list(list_type*lp){inti;intelenum;intm;lp->length=0;printf("请输入n个数\n");printf("n:");scanf_s("%d",&elenum);printf("请依次输入");for(i=0;i{scanf_s("%d",&m);lp->data[i]=m;lp->length++;}return*lp;}voidshowlist(list_type*lp){inti;printf("\nThese%drecordsare:\n",lp->length);if(lp->length<=0){printf("Nodata!\n");return;}for(i=0;ilength;i++)printf("%d",lp->data[i]);printf("\nlengthofthelistis:%d",lp->length);}list_typerebuild(list_type*lp){intj;inttemp;for(j=0;j<(lp->length/2);j++){temp=lp->data[j];lp->data[j]=lp->data[lp->length-j-1];lp->data[lp->length-j-1]=temp;}return*lp;}intmain(){list_typelist;create_list(&list);showlist(&list);rebuild(&list);printf("\nlistafterrebuild:\n");showlist(&list);}三、测试数据请输入n个数n:10请依次输入87654321851314212These10recordsare:87654321851314212lengthofthelistis:10listafterrebuild:These10recordsare:21314218512435678lengthofthelistis:10请按任意键继续...四、上机时遇到的问题(可分为编译问题和逻辑问题)编译问题:调用temp变量,对于末变量的尾值还不能有所把握解决:末变量属于lp->length-i-1,很容易忘掉这个1.逻辑问题:第一次尝试编写的过程,居然想到的是在新的顺序表上填写数据,这对于最优化的原则是很不好的。解决:常见的数据交换函数,swap啥的啊,还要提前声明好一个temp变量,有助于后续编写。五、实际运行结果:六、小结体会:掌握最基本的数据交换原则,还有运用指针来真正意义上的交换数据元素的地址,而不是改变它的元素值。总之,在本个单元的编写过程中,我加强了自己对于调试和深入到内存观察的能力,确实感觉自己的能力有所增加。感觉段老师就是人生导师啊,拯救了我的c语言。我的编程功底确实是很差的,感觉现在有很大的进步啊。
scanf_s("%d",&elem);
if(elem==-1)break;
lp->data[i]=elem;
lp->length++;
}
voidshowlist(list_type*lp)
inti;
printf("\nThese%drecordsare:
\n",lp->length);
if(lp->length<=0)
printf("Nodata!
\n");
return;
for(i=0;ilength;i++)
printf("%d",lp->data[i]);
printf("\nlengthofthelistis:
%d",lp->length);
intinsertlist(list_type*lp,intnew_elem,inti)
intj;
if(lp->length>=MAXNUM)
printf("thelistisfull,cannotinsert.");
return(false);
if(i<1||i>lp->length+1)
printf("\n%disinvalidvalue",i);
for(j=lp->length;j>=i-1;j--)
lp->data[j]=lp->data[j-1];
lp->data[i-1]=new_elem;//放入新元素;
lp->length++;//表长度增加;
return(true);
intdeletelist(list_type*lp,inti)
if(i<1||i>lp->length)
printf("elemnotexist");
for(j=i;jlength;j++)
lp->data[j-1]=lp->data[j];
lp->length--;//表长度减少;
list_typedelete_negative(list_type*lp)
intj=lp->length;
while(j>0)
if(lp->data[j]<0)
for(i=j;ilength;i++)
lp->data[i]=lp->data[i+1];
lp->length--;
j--;
return*lp;
voidmain()
list_typelist;
inti,new_elem;
createlist(&list);
showlist(&list);
printf("\ninsert:
Enterdataandi:
scanf_s("%d%d",&new_elem,&i);
insertlist(&list,new_elem,i);
printf("\nlistafterinsert:
printf("\ndelete:
Enteri:
scanf_s("%d",&i);
deletelist(&list,i);
printf("\nlistafterdelete:
delete_negative(&list);
printf("\nlistafterdeleteallnegative:
三、测试数据
pleaseinputdatasofthelist
87654321-5-4-3-2-1
These12recordsare:
87654321-5-4-3-2
lengthofthelistis:
12
insert:
55
listafterinsert:
These13recordsare:
876554321-5-4-3-2
13
delete:
1
listafterdelete:
76554321-5-4-3-2
listafterdeleteallnegative:
These7recordsare:
7655432
7请按任意键继续...
四、上机时遇到的问题(可分为编译问题和逻辑问题)
编译问题:
对于顺序表的length定义仍不清楚,对于我们之前申明的顺序表内存依旧存在,但是length会做相应的变化。
解决:
对于showlist函数的调用,对于delete的使用没有影响,要回顾顺序表知识点,做到对于基本函数的调用运用熟练。
逻辑问题:
顺序表的添加删减运算,经常处理不好尾值得定义。
多使用调试的工具,直接接触内存,回到最本质。
五、实际运行结果:
六、小结体会:
对于顺序表的操作,确实需要深刻理解末位元素的增删操作,以及要好好利用length这一个变量。
通过深入学习调试的手段,对于内存的变化,我对于编程的感觉似乎来了,感觉好好弥补了大一上的c语言的坑,感觉基础得到了很大的巩固。
1.2
一程序流程说明——有条理的文字或流程图*
二程序代码
#defineMAXNUM50
list_typecreate_list(list_type*lp)
intelenum;
intm;
printf("请输入n个数\n");
printf("n:
");
scanf_s("%d",&elenum);
printf("请依次输入");
for(i=0;i{scanf_s("%d",&m);lp->data[i]=m;lp->length++;}return*lp;}list_typeinsertlist(list_type*lp,intx){intm=lp->length;inti=lp->length;intj;while(m>0){if(lp->data[m]>x){i--;}m--;}for(j=lp->length;j>i;j--){lp->data[j]=lp->data[j-1];}lp->data[j]=x;lp->length++;return*lp;}list_typedelete_negative(list_type*lp){inti;intm;inta=0;for(i=0;ilength;i++){if(lp->data[i]<0)a++;}for(m=0;m{lp->data[m]=lp->data[m+a];}for(i=0;i{lp->length--;}return*lp;}voidshowlist(list_type*lp){inti;printf("\nThese%drecordsare:\n",lp->length);if(lp->length<=0){printf("Nodata!\n");return;}for(i=0;ilength;i++)printf("%d",lp->data[i]);printf("\nlengthofthelistis:%d",lp->length);} intmain(){intx;list_typelist;list=create_list(&list);printf("建立的顺序表如下");showlist(&list);printf("\n输入的x的值:");scanf_s("%d",&x);insertlist(&list,x);printf("新增元素的顺序表如下");showlist(&list);delete_negative(&list);printf("删去负数的顺序表如下");showlist(&list);}三测试数据请输入n个数n:5请依次输入-5-1247建立的顺序表如下These5recordsare:-5-1247lengthofthelistis:5输入的x的值:0新增元素的顺序表如下These6recordsare:-5-10247lengthofthelistis:6删去负数的顺序表如下These4recordsare:0247lengthofthelistis:4请按任意键继续... 四、上机时遇到的问题(可分为编译问题和逻辑问题)编译问题:申请了很多的变量。解决:应该要做到算法的优化设计。逻辑问题:对于删减顺序表中负数元素,如何做到优化,我当时的蛮力就是多次调用delete函数。解决:实际上该顺序表属于递增有序的,我们只要找到多少个负数元素就好,然后对于顺序表数据元素直接搬移多少个单位就好。 五、实际运行结果:六、小结体会:本次编写,较上次编写速度提升较快,说明多去练习调试对于编程语句的理解很有帮助,长期坚持下去,一定能够把编程能力训练扎实。 1.3一程序流程说明——有条理的文字或流程图*二程序代码#include#include#include"stdafx.h"#defineMAXNUM50#definetrue1#definefalse0typedefstruct{intdata[MAXNUM];intlength;}list_type;list_typecreate_list(list_type*lp){inti;intelenum;intm;lp->length=0;printf("请输入n个数\n");printf("n:");scanf_s("%d",&elenum);printf("请依次输入");for(i=0;i{scanf_s("%d",&m);lp->data[i]=m;lp->length++;}return*lp;}voidshowlist(list_type*lp){inti;printf("\nThese%drecordsare:\n",lp->length);if(lp->length<=0){printf("Nodata!\n");return;}for(i=0;ilength;i++)printf("%d",lp->data[i]);printf("\nlengthofthelistis:%d",lp->length);}list_typerebuild(list_type*lp){intj;inttemp;for(j=0;j<(lp->length/2);j++){temp=lp->data[j];lp->data[j]=lp->data[lp->length-j-1];lp->data[lp->length-j-1]=temp;}return*lp;}intmain(){list_typelist;create_list(&list);showlist(&list);rebuild(&list);printf("\nlistafterrebuild:\n");showlist(&list);}三、测试数据请输入n个数n:10请依次输入87654321851314212These10recordsare:87654321851314212lengthofthelistis:10listafterrebuild:These10recordsare:21314218512435678lengthofthelistis:10请按任意键继续...四、上机时遇到的问题(可分为编译问题和逻辑问题)编译问题:调用temp变量,对于末变量的尾值还不能有所把握解决:末变量属于lp->length-i-1,很容易忘掉这个1.逻辑问题:第一次尝试编写的过程,居然想到的是在新的顺序表上填写数据,这对于最优化的原则是很不好的。解决:常见的数据交换函数,swap啥的啊,还要提前声明好一个temp变量,有助于后续编写。五、实际运行结果:六、小结体会:掌握最基本的数据交换原则,还有运用指针来真正意义上的交换数据元素的地址,而不是改变它的元素值。总之,在本个单元的编写过程中,我加强了自己对于调试和深入到内存观察的能力,确实感觉自己的能力有所增加。感觉段老师就是人生导师啊,拯救了我的c语言。我的编程功底确实是很差的,感觉现在有很大的进步啊。
scanf_s("%d",&m);
lp->data[i]=m;
list_typeinsertlist(list_type*lp,intx)
intm=lp->length;
inti=lp->length;
while(m>0)
if(lp->data[m]>x)
i--;
m--;
for(j=lp->length;j>i;j--)
lp->data[j]=x;
inta=0;
if(lp->data[i]<0)
a++;
for(m=0;m{lp->data[m]=lp->data[m+a];}for(i=0;i{lp->length--;}return*lp;}voidshowlist(list_type*lp){inti;printf("\nThese%drecordsare:\n",lp->length);if(lp->length<=0){printf("Nodata!\n");return;}for(i=0;ilength;i++)printf("%d",lp->data[i]);printf("\nlengthofthelistis:%d",lp->length);} intmain(){intx;list_typelist;list=create_list(&list);printf("建立的顺序表如下");showlist(&list);printf("\n输入的x的值:");scanf_s("%d",&x);insertlist(&list,x);printf("新增元素的顺序表如下");showlist(&list);delete_negative(&list);printf("删去负数的顺序表如下");showlist(&list);}三测试数据请输入n个数n:5请依次输入-5-1247建立的顺序表如下These5recordsare:-5-1247lengthofthelistis:5输入的x的值:0新增元素的顺序表如下These6recordsare:-5-10247lengthofthelistis:6删去负数的顺序表如下These4recordsare:0247lengthofthelistis:4请按任意键继续... 四、上机时遇到的问题(可分为编译问题和逻辑问题)编译问题:申请了很多的变量。解决:应该要做到算法的优化设计。逻辑问题:对于删减顺序表中负数元素,如何做到优化,我当时的蛮力就是多次调用delete函数。解决:实际上该顺序表属于递增有序的,我们只要找到多少个负数元素就好,然后对于顺序表数据元素直接搬移多少个单位就好。 五、实际运行结果:六、小结体会:本次编写,较上次编写速度提升较快,说明多去练习调试对于编程语句的理解很有帮助,长期坚持下去,一定能够把编程能力训练扎实。 1.3一程序流程说明——有条理的文字或流程图*二程序代码#include#include#include"stdafx.h"#defineMAXNUM50#definetrue1#definefalse0typedefstruct{intdata[MAXNUM];intlength;}list_type;list_typecreate_list(list_type*lp){inti;intelenum;intm;lp->length=0;printf("请输入n个数\n");printf("n:");scanf_s("%d",&elenum);printf("请依次输入");for(i=0;i{scanf_s("%d",&m);lp->data[i]=m;lp->length++;}return*lp;}voidshowlist(list_type*lp){inti;printf("\nThese%drecordsare:\n",lp->length);if(lp->length<=0){printf("Nodata!\n");return;}for(i=0;ilength;i++)printf("%d",lp->data[i]);printf("\nlengthofthelistis:%d",lp->length);}list_typerebuild(list_type*lp){intj;inttemp;for(j=0;j<(lp->length/2);j++){temp=lp->data[j];lp->data[j]=lp->data[lp->length-j-1];lp->data[lp->length-j-1]=temp;}return*lp;}intmain(){list_typelist;create_list(&list);showlist(&list);rebuild(&list);printf("\nlistafterrebuild:\n");showlist(&list);}三、测试数据请输入n个数n:10请依次输入87654321851314212These10recordsare:87654321851314212lengthofthelistis:10listafterrebuild:These10recordsare:21314218512435678lengthofthelistis:10请按任意键继续...四、上机时遇到的问题(可分为编译问题和逻辑问题)编译问题:调用temp变量,对于末变量的尾值还不能有所把握解决:末变量属于lp->length-i-1,很容易忘掉这个1.逻辑问题:第一次尝试编写的过程,居然想到的是在新的顺序表上填写数据,这对于最优化的原则是很不好的。解决:常见的数据交换函数,swap啥的啊,还要提前声明好一个temp变量,有助于后续编写。五、实际运行结果:六、小结体会:掌握最基本的数据交换原则,还有运用指针来真正意义上的交换数据元素的地址,而不是改变它的元素值。总之,在本个单元的编写过程中,我加强了自己对于调试和深入到内存观察的能力,确实感觉自己的能力有所增加。感觉段老师就是人生导师啊,拯救了我的c语言。我的编程功底确实是很差的,感觉现在有很大的进步啊。
lp->data[m]=lp->data[m+a];
for(i=0;i{lp->length--;}return*lp;}voidshowlist(list_type*lp){inti;printf("\nThese%drecordsare:\n",lp->length);if(lp->length<=0){printf("Nodata!\n");return;}for(i=0;ilength;i++)printf("%d",lp->data[i]);printf("\nlengthofthelistis:%d",lp->length);} intmain(){intx;list_typelist;list=create_list(&list);printf("建立的顺序表如下");showlist(&list);printf("\n输入的x的值:");scanf_s("%d",&x);insertlist(&list,x);printf("新增元素的顺序表如下");showlist(&list);delete_negative(&list);printf("删去负数的顺序表如下");showlist(&list);}三测试数据请输入n个数n:5请依次输入-5-1247建立的顺序表如下These5recordsare:-5-1247lengthofthelistis:5输入的x的值:0新增元素的顺序表如下These6recordsare:-5-10247lengthofthelistis:6删去负数的顺序表如下These4recordsare:0247lengthofthelistis:4请按任意键继续... 四、上机时遇到的问题(可分为编译问题和逻辑问题)编译问题:申请了很多的变量。解决:应该要做到算法的优化设计。逻辑问题:对于删减顺序表中负数元素,如何做到优化,我当时的蛮力就是多次调用delete函数。解决:实际上该顺序表属于递增有序的,我们只要找到多少个负数元素就好,然后对于顺序表数据元素直接搬移多少个单位就好。 五、实际运行结果:六、小结体会:本次编写,较上次编写速度提升较快,说明多去练习调试对于编程语句的理解很有帮助,长期坚持下去,一定能够把编程能力训练扎实。 1.3一程序流程说明——有条理的文字或流程图*二程序代码#include#include#include"stdafx.h"#defineMAXNUM50#definetrue1#definefalse0typedefstruct{intdata[MAXNUM];intlength;}list_type;list_typecreate_list(list_type*lp){inti;intelenum;intm;lp->length=0;printf("请输入n个数\n");printf("n:");scanf_s("%d",&elenum);printf("请依次输入");for(i=0;i{scanf_s("%d",&m);lp->data[i]=m;lp->length++;}return*lp;}voidshowlist(list_type*lp){inti;printf("\nThese%drecordsare:\n",lp->length);if(lp->length<=0){printf("Nodata!\n");return;}for(i=0;ilength;i++)printf("%d",lp->data[i]);printf("\nlengthofthelistis:%d",lp->length);}list_typerebuild(list_type*lp){intj;inttemp;for(j=0;j<(lp->length/2);j++){temp=lp->data[j];lp->data[j]=lp->data[lp->length-j-1];lp->data[lp->length-j-1]=temp;}return*lp;}intmain(){list_typelist;create_list(&list);showlist(&list);rebuild(&list);printf("\nlistafterrebuild:\n");showlist(&list);}三、测试数据请输入n个数n:10请依次输入87654321851314212These10recordsare:87654321851314212lengthofthelistis:10listafterrebuild:These10recordsare:21314218512435678lengthofthelistis:10请按任意键继续...四、上机时遇到的问题(可分为编译问题和逻辑问题)编译问题:调用temp变量,对于末变量的尾值还不能有所把握解决:末变量属于lp->length-i-1,很容易忘掉这个1.逻辑问题:第一次尝试编写的过程,居然想到的是在新的顺序表上填写数据,这对于最优化的原则是很不好的。解决:常见的数据交换函数,swap啥的啊,还要提前声明好一个temp变量,有助于后续编写。五、实际运行结果:六、小结体会:掌握最基本的数据交换原则,还有运用指针来真正意义上的交换数据元素的地址,而不是改变它的元素值。总之,在本个单元的编写过程中,我加强了自己对于调试和深入到内存观察的能力,确实感觉自己的能力有所增加。感觉段老师就是人生导师啊,拯救了我的c语言。我的编程功底确实是很差的,感觉现在有很大的进步啊。
intmain()
intx;
list=create_list(&list);
printf("建立的顺序表如下");
printf("\n输入的x的值:
scanf_s("%d",&x);
insertlist(&list,x);
printf("新增元素的顺序表如下");
printf("删去负数的顺序表如下");
三测试数据
请输入n个数
n:
5
请依次输入-5-1247
建立的顺序表如下
These5recordsare:
-5-1247
输入的x的值:
0
新增元素的顺序表如下
These6recordsare:
-5-10247
6删去负数的顺序表如下
These4recordsare:
0247
4请按任意键继续...
申请了很多的变量。
应该要做到算法的优化设计。
对于删减顺序表中负数元素,如何做到优化,我当时的蛮力就是多次调用delete函数。
实际上该顺序表属于递增有序的,我们只要找到多少个负数元素就好,然后对于顺序表数据元素直接搬移多少个单位就好。
本次编写,较上次编写速度提升较快,说明多去练习调试对于编程语句的理解很有帮助,长期坚持下去,一定能够把编程能力训练扎实。
1.3
for(i=0;i{scanf_s("%d",&m);lp->data[i]=m;lp->length++;}return*lp;}voidshowlist(list_type*lp){inti;printf("\nThese%drecordsare:\n",lp->length);if(lp->length<=0){printf("Nodata!\n");return;}for(i=0;ilength;i++)printf("%d",lp->data[i]);printf("\nlengthofthelistis:%d",lp->length);}list_typerebuild(list_type*lp){intj;inttemp;for(j=0;j<(lp->length/2);j++){temp=lp->data[j];lp->data[j]=lp->data[lp->length-j-1];lp->data[lp->length-j-1]=temp;}return*lp;}intmain(){list_typelist;create_list(&list);showlist(&list);rebuild(&list);printf("\nlistafterrebuild:\n");showlist(&list);}三、测试数据请输入n个数n:10请依次输入87654321851314212These10recordsare:87654321851314212lengthofthelistis:10listafterrebuild:These10recordsare:21314218512435678lengthofthelistis:10请按任意键继续...四、上机时遇到的问题(可分为编译问题和逻辑问题)编译问题:调用temp变量,对于末变量的尾值还不能有所把握解决:末变量属于lp->length-i-1,很容易忘掉这个1.逻辑问题:第一次尝试编写的过程,居然想到的是在新的顺序表上填写数据,这对于最优化的原则是很不好的。解决:常见的数据交换函数,swap啥的啊,还要提前声明好一个temp变量,有助于后续编写。五、实际运行结果:六、小结体会:掌握最基本的数据交换原则,还有运用指针来真正意义上的交换数据元素的地址,而不是改变它的元素值。总之,在本个单元的编写过程中,我加强了自己对于调试和深入到内存观察的能力,确实感觉自己的能力有所增加。感觉段老师就是人生导师啊,拯救了我的c语言。我的编程功底确实是很差的,感觉现在有很大的进步啊。
list_typerebuild(list_type*lp)
inttemp;
for(j=0;j<(lp->length/2);j++)
temp=lp->data[j];
lp->data[j]=lp->data[lp->length-j-1];
lp->data[lp->length-j-1]=temp;
create_list(&list);
rebuild(&list);
printf("\nlistafterrebuild:
10
请依次输入87654321851314212
These10recordsare:
87654321851314212
listafterrebuild:
21314218512435678
10请按任意键继续...
调用temp变量,对于末变量的尾值还不能有所把握
末变量属于lp->length-i-1,很容易忘掉这个1.
第一次尝试编写的过程,居然想到的是在新的顺序表上填写数据,这对于最优化的原则是很不好的。
常见的数据交换函数,swap啥的啊,还要提前声明好一个temp变量,有助于后续编写。
掌握最基本的数据交换原则,还有运用指针来真正意义上的交换数据元素的地址,而不是改变它的元素值。
总之,在本个单元的编写过程中,我加强了自己对于调试和深入到内存观察的能力,确实感觉自己的能力有所增加。
感觉段老师就是人生导师啊,拯救了我的c语言。
我的编程功底确实是很差的,感觉现在有很大的进步啊。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1