第一篇:实验总结报告-线性表
实验总结报告—栈和队列
学号:
姓名: 时间:
一、目的 1.做实验的目的
加深对线性表的理解,学会定义线性表的存储结构,掌握线性表的基本操作。
2.撰写实验报告的目的
对本次实验情况进行总结,加强对实验内容的理解,对实验过程有一个系统的认识,从中获得本次试验的经验,并对实验结果进行适当的分析,加深对栈和队列的理解和认识。
二、内容
1.说明实验次数及实验内容 本次实验用一次实验课时完成 实验内容:
节点定义:
typedef struct node{
int idx;int age;struct node *next;}Node,*List;本次实验的对象的存储内容包括ID和AGE,所以定义了如上的结构体,idx用于存储ID号,age用于存储年龄,next用于形成链式结构,Node定义了该类型的一个节点,List定义了该类型的一个链表。(1)、编写函数CreateList()和PrintList(),从给定数组创建链表,打印链表。
int idx[8] = {1,2,3,4,5,6,7,8};int age[8] = {15,18,13,22,50,18,30,20};List CreatList(int idx[], int age[],int len){} int PrintList(List L){}(2)、编写函数DeleteNode(List L, int delete_age),完成以下操作。int DeleteNodeAge(List L, int delete_age){} 该函数传入List L,可以直接修改链表的节点,建议返回值为int 或void类型,无需为List类型,3,4题同上。2.1删除年龄为18的成员,打印链表。2.2删除年龄为20的成员,打印链表。2.3删除年龄为15的成员,打印链表。
2.4(可选)删除年龄为21的成员(因无此成员,报错),打印链表。(3)、编写函数InsertNodeByIdx(List L, Node nd),完成以下操作。(或编写函数InsertNodeByIdx(List L, Node *pnd),完成以下操作。)(建议用 Node *pnd,因Node nd作为参数传给函数InsertNodeByIdx,nd本身不能被修改,而插入链表需修改nd.next,故需创建新的节点把nd的idx和age赋值给新节点。)
3.1将(idx,age)=(6,23)插入链表,保证链表的idx仍为升序,打印链表。3.2将(idx,age)=(1,25)插入链表,保证链表的idx仍为升序,打印链表。(4)(选做)、编写函数InsertNodeByAge(List L, Node nd),完成以下操作。(或编写函数InsertNodeByAge(List L, Node *pnd),完成以下操作。)
4.1将(idx,age)=(9,31)插入链表,不用保证链表的idx仍为升序,新节点插在节点nd0后面,要求nd0.age是整个链表节点的age小于且最接近nd.age,打印链表。
(提示:本例要求插在(7,30)后面。)4.2插入节点(8,1)
(提示:本例要求插在(1,25)之前,即最前面,因age=1最小。)2.做实验完成情况
要求实验内容在实验时间内全部完成,选做实验未做。创建链表:
List CreateList(int idx[],int age[],int len){ List p,L;int i;L=NULL;for(i=len-1;i>=0;i--){
p=new Node;
p->age=age[i];
p->idx=idx[i];
p->next=L;
L=p;} return L;} 该操作创建一个不带头节点的链表并返回类型为List的结果 打印链表:
void PrintList(List L){ List p=L;printf(“idx agen”);while(p){
printf(“%d %dn”,p->idx ,p->age);
p=p->next;} } 该操作从表头到表尾依次打印idx和age 删除节点:
int DeleteNodeAge(List &L, int delete_age){ List p=L;int flag=0;if(p->age==delete_age){
L=L->next;
flag=1;} else{ while(p->next){
if(p->next->age==delete_age){
flag++;
if(p->next->next==NULL)
p->next=NULL;
else p->next=p->next->next;
}
else p=p->next;
} } return flag;} 该操作删除需要删除的节点,成功删除返回删除节点的个数,否则返回0 插入节点:
void InsertNodeByIdx(List &L, Node *pnd){ List p=L;if(p->idx>=pnd->idx){
pnd->next=L;
L=pnd;
return;} else{ while(p->next){
if(p->next->idx<=pnd->idx)
p=p->next;
else{
pnd->next=p->next;
p->next=pnd;
return;
}
} } } 该操作完成节点的插入,插入之后链表仍按idx成升序 主函数: int main(){ List L,pnd1,pnd2;pnd1=new Node;pnd2=new Node;int idx[8]={1,2,3,4,5,6,7,8},age[8]={15,18,13,22,50,18,30,20},r;L=CreateList(idx,age,8);PrintList(L);r=DeleteNodeAge(L,18);printf(“The result is %dn”,r);PrintList(L);r=DeleteNodeAge(L,20);printf(“The result is %dn”,r);PrintList(L);r=DeleteNodeAge(L,15);printf(“The result is %dn”,r);PrintList(L);pnd1->idx=6;pnd1->age=23;InsertNodeByIdx(L,pnd1);PrintList(L);pnd2->idx=1;pnd2->age=25;InsertNodeByIdx(L,pnd2);PrintList(L);system(“pause”);return 0;} 实验结果:
从实验代码及结果来看,首先按要求创建单链表,从打印结果来看,链表成功创建;第二步删除age为18的节点,从链表来看有两个age为18的节点,所以Delete的返回值r为2,从打印结果来看,两个节点成功删除;第三步删除age为20的节点,链表中只有一个符合要求的节点,所以返回值r为1,打印结果说明成功删除;第四步插入idx为6,age为23的节点,第四步插入idx为1,age为25的节点,从打印结果来看均成功操作。
三、总结
第二篇:实验1 线性表应用-多项式计算
一.实验目的和要求
1.进一步掌握线性表的的基本操作。
2.掌握线性表的典型应用----多项式表示与计算。
二.实验内容
1. 设用线性表((a1, e1),(a2, e2), ……,(am, em))表示多项式P(x)= a1*xe1 + a2*xe2 +…+ am*xem,请编写用链式存储结构(带表头附加结点的单链表)存储该多项式时,多项式基本操作的实现函数。要求:把多项式线性表的结构定义及多项式基本操作实现函数存放在文件Linkpoly.h中。说明:基本操作可包括如下 ① 初始化多项式InitPoly(p)② 输出多项式TraversePoly(p)③ 清除多项式ClearPoly(p)④ 插入一项 InsertPoly(p, a, e)
⑤ 删除一项 DeletetPoly(p, a, e, pos)⑥ 多项式求值PolySum(p, x)
⑦ 多项式相加PolyAdd(p1, p2)
2. 建立主程序文件test1.cpp,在主函数main()中通过调用Linkpoly.h中的函数进行测试。
3. 编写用顺序存储结构存储多项式时,上述各多项式基本操作的实现函数。要求: 把多项式线性表的结构定义及多项式基本操作实现函数存放在文件Seqpoly.h中,在主程序文件test1.cpp中增加测试语句对Seqpoly.h中的函数进行测试。
4. 填写实验报告,实验报告文件取名为report1.doc。
5. 上传实验报告文件report1.doc与源程序文件test1.cpp及Linkpoly.h、Seqpoly.h 到Ftp服务器上自己的文件夹下。
三.函数的功能说明及算法思路
包括每个函数的功能说明,及一些重要函数的算法实现思路
四.实验结果与分析
包括运行结果截图等
五.心得体会
记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。
【附录----源程序】 Test1.cpp: #include //初始化多项式 InitPoly(pb);cout<<“请输入要测试的项数:”;cin>>n;cout<<“请依次输入要测试的各项的系数和指数:”;for(i=0;i cin>>a; cin>>e; InsertPoly(pa, a, e); //插入一项 pa=pa->next;} pa=pa->next;cout<<“该多项式为:”;TraversePoly(pa); //输出多项式 cout< cout<<“删除成功!现在多项式为:”; TraversePoly(pa); cout< cout<<“删除失败!”< cin>>a; cin>>e; InsertPoly(pb, a, e); //插入一项 pb=pb->next;} pb=pb->next;pp=PolyAdd(pa, pb);cout<<“两多项式相加后得到的多项式为:”;TraversePoly(pp);cout< cout< cout< cout<<“现在进行第二次测试。(顺序表表示)”< cin>>a; cin>>e; InsertPoly1(s, a, e);} cout<<“该多项式为:”;TraversePoly1(s);cout< cout<<“删除成功!现在多项式为:”; TraversePoly1(s); cout< cout<<“删除失败!”< cin>>a; cin>>e; InsertPoly1(t, a, e); //插入一项 } q=PolyAdd1(s, t);cout<<“两多项式相加后得到的多项式为:”;TraversePoly1(q);cout< Linkploy.h: struct NodeType{ float coef; int exp; NodeType *next;};bool InitPoly(NodeType *&p) //初始化多项式 { if((p=new NodeType)==NULL) return false;p->next=p;return true;} void TraversePoly(NodeType *p) //输出多项式 { NodeType *h=p->next;if(h!=p){ cout< h=h->next;} while(h!=p){ if(h->coef>0) cout<<“+”; cout< h=h->next;} } void ClearPoly(NodeType *&p) //清除多项式 { NodeType *cp,*np;cp=p->next;while(cp!=p){ np=cp->next; delete cp; cp=np;} p->next=p;} bool InsertPoly(NodeType *&p, float a, int e) //插入一项 { NodeType *h;if((h=new NodeType)==NULL) return false;h->coef=a;h->exp=e;h->next=p->next;p->next=h;return true;} bool DeletetPoly(NodeType *&p, float a, int e, int pos) //删除一项 { if(pos>1||pos<-1) return false;NodeType *cp=p->next;NodeType *np=p;if(pos==0){ while(cp!=p){ if(cp->coef==a&&cp->exp==e) break; else{ np=cp; cp=cp->next; } } } else if(pos==-1) while(cp!=p){ np=cp; cp=cp->next; } np->next=cp->next;delete cp; return true;} double PolySum(NodeType *p, float x) //多项式求值 { int i;double sum=0,item; NodeType *cp=p->next;while(cp!=p){ item=1; for(i=1;i<=cp->exp;i++) item=item*x; sum=sum+item*cp->coef; cp=cp->next;} return sum;} NodeType *PolyAdd(NodeType *p1, NodeType *p2) //多项式相加 { float coef;NodeType *a=p1->next,*b=p2->next,*c,*pc; InitPoly(c);pc=c;while(a!=p1&&b!=p2){ if(a->exp==b->exp){ coef=a->coef+b->coef; if(coef!=0){ InsertPoly(pc, coef, a->exp); pc=pc->next; } a=a->next; b=b->next; } else if(a->exp InsertPoly(pc,a->coef,a->exp); pc=pc->next; a=a->next; } else{ InsertPoly(pc,b->coef,b->exp); pc=pc->next; b=b->next; } } while(a!=p1){ InsertPoly(pc,a->coef,a->exp); pc=pc->next; a=a->next; } while(b!=p2){ InsertPoly(pc,b->coef,b->exp); pc=pc->next; b=b->next; } return c;} Seqploy.h: #define MaxSize 10000 struct ListType{ float *list; int size;};void InitPoly1(ListType &p) //初始化多项式 { p.list=(float*)malloc(MaxSize*sizeof(float)); if(p.list==NULL){ cout<<“动态可分配的储存空间用完,退出运行!”< exit(1); } p.size=0;for(int i=0;i p.list[i]=0;} void TraversePoly1(ListType p) //输出多项式 { int i=0;if(p.list[i]!=0) cout< for(i=1;i if(p.list[i]!=0) break; cout< if(p.list[i]>0){ cout<<“+”; cout< } if(p.list[i]<0) cout< //清除多项式 { if(p.list!=NULL){ delete []p.list; p.list=NULL;} p.size=0;} void InsertPoly1(ListType &p, float a, int e) //插入一项 { p.list[e]=a;if(p.size p.size=e;} bool DeletetPoly1(ListType &p, float a, int e, int pos) //删除一项 { int i,n;if(p.size==0){ cout<<“多项式为空,删除无效!”< return false;} if(pos==0) if(p.list[e]==a) p.list[e]=0;else if(pos==-1) p.list[p.size]=0;return true;} double PolySum1(ListType p, float x) { double sum=0,item;int i,j;for(i=0;i<=p.size;i++){ item=1; for(j=1;j<=i;j++) item=item*x; sum=sum+item*p.list[i];} return sum;} ListType PolyAdd1(ListType p1, ListType p2){ ListType p;InitPoly1(p);float coef;int i,j;for(i=0;i<=p1.size;i++){ coef=p1.list[i]+p2.list[i]; InsertPoly1(p, coef, i);} //多项式求值 //多项式相加 if(i<=p1.size) for(j=i;j<=p1.size;j++) InsertPoly1(p, p1.list[j], j);if(i<=p2.size) for(j=i;j<=p2.size;j++) InsertPoly1(p, p2.list[j], j);return p;} 实验报告 专业:______ 姓名:______ 学号:______ 日期:______ 桌号:______________ 课程名称: 模拟电子技术基础实验 指导老师: 成绩:________________ 实验名称: 实验总结报告 一、体会与收获 在这个学期中,我们一共完成了从常用电子仪器的使用到EDA 半导体器件特性仿真等五个实验课题。具体的实验情况在实验报告中已经很清楚的反映了。在此我想谈谈我的体会与收获。 首先,我们在试验中面临着很多问题。实验仪器就是其中之一。实验室中的很多仪器:示波器、交流毫伏表,确实是由于年代久远而不能正常工作。但我发现,很多同学在实验现象没出来的情况下就借口说是实验仪器的问题。其实不然。很多情况下,仪器没有调试好,导致现象不明显或者与理论相差甚远。 在做基本运算电路设计实验时,通过老师上课精彩的讲解使我感受到了一种“新的世界观”,认识到了理论学习和实验的区别,在以后做实验的时候要对所有器械保持怀疑的心态,坚持“自己测的才是准的”原则。 通过解决每一次实验出现的问题,我在做实验的时候变得更加有耐心。在连接电路前,都会认真分析一下实验原理。然后根据实验书和老师的ppt上的步骤一步一步的来做。果然,出现错误的几率小了很多。其次,做实验要养成好的习惯。很多同学在做实验的时候态度很随便。没有注意诸如:连线之前检查导线是否导通、用万用表测电阻时不质疑短接调零、链接电路是带电操作等等。也许,在很多人看来这些都是小问题。但真正每一次都做到一丝不苟,养成良好的习惯的同学并不多。 接下来,我想说的是实验的目的。刚开始,我认为实验是一项任务,只要完成了就行。无非就是照着课本连连线、得出个已经计算好的结果就行了。但自从自己做功放后我改变了这种看法。在做功放的时候,虽然原理图都是被人提前设计好的。但是在做得时候总是会需要自己去调试、布线。有时候看似连接的很完美的电路,可能会因为某个地方的虚焊而不能工作。这种情况非常锻炼你能力。在找错误的地方的时候你自然而然的明白了电路的原理。而且,当做好一个自己独立完成的功放后,会有一种成就感。 最后,我想说实验跟课本的理论相结合,在课本中学习,在实验中检验。在实验中发现,用课本知识去分析。兴趣就在这一个个的实验中激发了。当然,我明白大学的最终目的不是让我们去做一些诸如功放之类的东西,而是锻炼我们去探索、去发现、去学习的能力。可能我们做的某项东西很简单或者没有做成功,但那并不是失败,因为你已经学习到了许多。耐心并且细心的去做每一步,坚持严谨的态度做到最后。每一个人都是成功者。 二、意见与建议 对模电实验的建议: ①老师在讲课过程中的实物演示部分,可以用幻灯片播放拍摄的操作短片,或是在大屏幕上放出实物照片进行讲解,因为用第一排的仪器或元件直接讲解的话看的不是很清楚。 ②实验室里除了后面的几台,前面也时不时有示波器故障,如果没有发现示波器已故障的话会给实验带来麻烦。因此希望老师可以教几个识别示波器是否故障的方法。 ③选题方面,从元件的认识逐渐过渡到焊电路板进行实验,内容涵盖面合理,没有更多的建议了。 感谢老师半学期来的教诲和指导! 三、课程评价 在大学二年级的第一学期,我们按课程计划,完成了模电实验课程的学习,我感到收获很大。 老师在讲解实验课程时:教学内容丰富,授课生动、详细,思路清晰,富有逻辑性、启发性,而且善于激励学生兴趣,经常产生师生互动;他理论知识功底深厚,实践经验丰富,并且能够理论联系实际,举例生动形象,对模电的理论学习有很大帮助;教学方式得当,能够因材施教,给学生一个相对自我发展的空间。 他讲课时语言幽默,平易近人,关心学生,深受同学好评;讲课过程中认真负责,严格要求,把教书育人很好地结合起来。 通过模电实验课程,增强了我的动手能力,帮助我在以后的学习生活中能够顺利解决一些难题。希望学校今后能够为学生多开类似的课程,让在校的学生得到更多的锻炼机会。 课程总结报告 姓名 : 学院: 在本课程中,我一直按时上课,从不旷课,认真听讲,积极参与课堂讨论,主动思考并回答老师的提问。在创业实践这个课程学习中,首先,我在老师的指导下对自己的创业资源进行了归纳与分析。仔细分析并搞清自己的创业优势资源,并认真思考了如何将资源优势转化为创业优势和根据自己的资源优势与实力,思考如何走出创业第一步。利用老师提供的行业分类为自己设想了一个具体的创业点子。 接下来,我学习了从热点中捕捉创业商机,掌握通过分析热点捕捉创业商机的基本方法。比如注意到了新生代子女和老年人作为消费群体的需求新变化和特点已成为时下热点话题,因此分析当前儿童和老年人市场的创业机会。针对人们收入水平提高所带来的需求新变化这一热点话题,因此分析了人们可支配收入提高所带来的创业机会。并且结合自身作为大学生的身份,以学校学生宿舍区复印服务社为研究对象,或以自己最熟悉的产品/服务为研究对象。 除此之外,我还学会了利用EXCEL处理简单函数,进行了收益分析。学习了利用五力分析模型和SWOT分析对自己的创业商机做可行性分析。了解和掌握创业企业市场分析的基本方法,通过这种分析结果进行企业决策。还学习了本量利计算,它是了解和掌握创业企业产品或服务的本量利计算基本方法。握利用本量利计算的结果我可以对创业决策进行调整的基本方法。 最后,我还针对自己的具体创业项目进行了岗位分析和人员安排信息的思考。写出了我的创业计划中创建公司的岗位、任务、人员数量、待遇等信息。通过京东商城的案例进行了商业模式的分析训练,并且针对自己的创业项目确定适当商业模式的能力。结合课程中的内容对给出案例进行商业模式分析。 经过系统的创业实践的学习,我对创业所需懂得的基本理论有了一定的掌握,并通过老师课堂讲授和完成老师的实验报告,理清了自己的创业思路,细化了创业的各个方面的内容。使得我的创业计划不再显得那么鲁莽,没有逻辑。 课堂学习中,我主要掌握的原理就是五力分析、SWOT分析、量本利分析和商业模式的认识。 五力分析模型是迈克尔·波特于80年代初提出,对企业战略制定产生全球性的深远影响。用于竞争战略的分析,可以有效的分析客户的竞争环境。五力分别是: 供应商的讨价还价能力、购买者的讨价还价能力、潜在竞争者进入的能力、替代品的替代能力、行业内竞争者现在的竞争能力; SWOT分析方法是一种企业战略分析方法,即根据企业自身的既定内在条件进行分析,找出企业的优势、劣势及机会,威胁,其中,S、W是内部因素,O、T是外部因素。按照企业竞争战略的完整概念,战略应是一个企业“能够做的”(即组织的强项和弱项)和“可能做的”(即环境的机会和威胁)之间的有机组合。 量本利分析法,也叫盈亏平衡分析,是通过分析生产成本、销售利润和产品数量这三者的关系,掌握盈亏变化的规律,指导出企业选择能够以最小的成本生产最多产品并可使企业获得最大利润的经营方案。 商业模式是指一个完整的产品、服务和信息流体系,包括每一个参与者和其在其中起到的作用,以及每一个参与者的潜在利益和相应的收益来源和方式。在分析商业模式过程中,主要关注一类企业在市场中与用户、供应商、其他合作办的关系,尤其是彼此间的物流、信息流和资金流。在做实验作业的过程中发现自己有不足的情况的时候,我会及时和一起上课的同学进行讨论,通过与他人的沟通和交流中,获取有效的信息,对自己的观点不断去推敲和修正。也和舍友、其它专业的同学进行交流,将课堂上要求展示的自己的创业计划,做成PPT展示给周围的同学,看周围的同学的反应,询问他们最真实的感受,比如,我的创业点子是否足够有创意,你认为它可行性强么,有什么我表达不清楚的地方或者细节的疏忽,有什么建设性的意见等 总体的收获就是在课堂的学习中,我认识到了创业并不是一种被迫性的,很多人创业不是在职场失意的时候。很多人创业是充满了激情,是为了在更高一层次实现自我。是为了追求自己的一番事业。就像在最后一节课里老师给我们请来的总经理的亲身经历一样。还感受颇多的一点是创业并不是头脑一热,光有激情、有想法就可以做到的,它也需要我们具有专业的知识,掌握基本的理论。在这方面,通过我们的课堂学习,我觉得我比以前有了很大的提升。 线性表上机实习 1、实验目的 (1)熟悉将算法转换为程序代码的过程。 (2)了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的C语言描述方法。 (3)熟练掌握顺序表的基本运算:查找、插入、删除等,掌握顺序表的随机存取特性。(4)了解线性表的链式存储结构,熟练掌握线性表的链式存储结构的C语言描述方法。(5)熟练掌握线性链表(单链表)的基本运算:查找、插入、删除等,能在实际应用中灵活选择适当的链表结构。 2、实验要求 (1)熟悉顺序表的插入、删除和查找。(2)熟悉单链表的插入、删除和查找。 3、实验内容: ① 顺序表 (1)抽象数据类型定义 typedef struct { TypeData data[maxsize]; //容量为maxsize的静态顺手表 int n; //顺序表中的实际元素个数 }SeqList; //静态顺序表的定义 在本次实验中,首先建立一个空的静态顺序表,然后键盘输入数据存入表中,然后进入菜单选择界面,通过不同的数字输入,实现对顺序表,删除,插入,查找,显示等操作。 (2)存储结构定义及算法思想 在顺序表结构体的定义中,typedef int TypeData 为整型,存储结构如下: for(n=0;n cout<<“请输入线性表数据”< cin>>L.data[n]; //顺序将数据存入顺序表 } //其他存储与此类似,都是直接赋值与数组的某一位 插入版块子函数: void insert(SeqList &L) //插入数据 { int a,b,c,k; cout<<“请输入插入的数及其插入的位置”< cin>>a>>b; if(b<=0||b>(L.n+1)){cout<<“不能在该位置插入”< k=L.data[b-1];L.data[b-1]=a;c=L.n;L.n=L.n+1; while(c>b){ L.data[c]=L.data[c-1];c--; //通过循环,实现插入位置后的数据挨个往后移动一位 } L.data[b]=k;} 顺序表的插入与删除操作类似,在插入与删除后,都要循环调整后面数组的每一位元素,同时记录数据元素的长度的标示符也要跟着改变。显示操作是通过循环实现表中第一个元素到最后一个元素的输出,查找操作是直接取数组中的查找位输出。 (3)实验结果与分析 ② 单链表 (1)抽象数据类型定义 typedef struct node{ DataType data; //链表的数据类型 struct node *link; //链表的结点指针 }linknode,*linklist; //定义了结构体linklode和结构体指针linklist 在本次实验中,首先程序自己建立一个空的头结点,通过菜单的功能选择“添加链表数据”可自由添加链表的节点数及元素值。在菜单选择中,有“添加链数据”,“插入链表数据”,“删除链表数据”,“查找链表数据”和“显示链表数据”功能,选择不能的功能选择就能实现不同的操作。其中“添加链表数据”可反复批量输入链表数据。 (2)存储结构定义及算法思想 在单链表中,typedef int DataType;DataType data;定义链表存储数据位整型。存储结构如下: while(p->link!=NULL){ p=p->link; k++; //首先找到单链表的最后结点(如果是只有头结点 } 的单链表则直接跳过),以便后面接着输入数据第三篇:实验总结报告
第四篇:实验总结报告
第五篇:数据结构线性表试验报告