燕山大学里仁秋基础算法实验Word文档下载推荐.docx

上传人:b****5 文档编号:15768443 上传时间:2022-11-16 格式:DOCX 页数:15 大小:95.37KB
下载 相关 举报
燕山大学里仁秋基础算法实验Word文档下载推荐.docx_第1页
第1页 / 共15页
燕山大学里仁秋基础算法实验Word文档下载推荐.docx_第2页
第2页 / 共15页
燕山大学里仁秋基础算法实验Word文档下载推荐.docx_第3页
第3页 / 共15页
燕山大学里仁秋基础算法实验Word文档下载推荐.docx_第4页
第4页 / 共15页
燕山大学里仁秋基础算法实验Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

燕山大学里仁秋基础算法实验Word文档下载推荐.docx

《燕山大学里仁秋基础算法实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《燕山大学里仁秋基础算法实验Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

燕山大学里仁秋基础算法实验Word文档下载推荐.docx

LNode*creat(void)

操作结果:

创建一个单向链表,并且逆序输入链表元素

voidprint(LNode*head)

输出单向链表

LNode*Creat(LNode*head1,LNode*head2)

对两个链表进行相加操作,建立相加后的链表

}ADTLNode

4.算法描述

定义三个指针变量head1head2head3

屏幕输出:

pleaseputanumber

输入任意位数数字,调用LNode*creat(void),建立链表head1

pleaseputanotherone

输入任意位数数字,调用LNode*creat(void),建立链表head2

调用函数Creat(head1,head2)对链表head1,head2进行相加操作,建立新链表head3

调用函数print(head3)输出链表head3

”head3”

程序结束

5.程序结构

voidmain()

LNode*creat(void)voidprint(LNode*head)LNode*Creat(LNode*head1,LNode*head2)

6.调试情况

(1)刚开始的时候曾忽略一些变量的“&

”使调试程序时花费了不少时间。

今后应该重视参数的变量和赋值属性的区分和标识。

(2)本程序的模块的划分的比较合理,且尽可能的将指针的操作封装到了模块的里面,使调试的时候比较顺利。

(3)开始设计的时候没有注意到当两个数都加完了,但还是进位的情况,经过讨论在while循环的外面又加上了一条语句,使程序更加准却,并使其的健壮性提到了提高。

7.运行结果

⑴123456789123456789+123456789123456789

⑵999995+5

⑶5+999995

8.设计技巧

采用由表尾到表头逆向建立链表的方法。

9.心得体会

通过对实验的思考以及编译过程,我可以对课本所学知识进行熟练运用,包括单链表的建立,正序逆序的分别,单链表的输出,两个单链表的操作,相加以及进位的算法思想的建立以及正确编译。

程序清单:

#include<

stdio.h>

malloc.h>

#defineNULL0

typedefstructLNode{

intdata;

structLNode*next;

}LNode;

charn;

LNode*creat(void){

LNode*head;

LNode*p,*q;

head=(LNode*)malloc(sizeof(LNode));

head->

data=0;

q=NULL;

while((n=getchar())!

='

\n'

if(n>

=48&

&

n<

=57){

p=(LNode*)malloc(sizeof(LNode));

p->

data=n-48;

next=q;

q=p;

}

head->

next=p;

return(head);

}

voidprint(LNode*head){

LNode*r;

printf("

Thenumis:

\n"

);

r=head;

if(head!

=NULL)

do{

printf("

%d"

r->

next->

data);

r=r->

next;

while(r->

next!

=NULL);

printf("

LNode*Creat(LNode*head1,LNode*head2){

LNode*p,*q,*r,*s,*t;

intcarry=0;

intnum;

head=(LNode*)malloc(sizeof(LNode));

r=head1->

s=head2->

while((r!

=NULL)&

(s!

=NULL)){

p=(LNode*)malloc(sizeof(LNode));

num=r->

data+s->

data+carry;

p->

data=num%10;

carry=num/10;

q=p;

r=r->

s=s->

}

t=(r!

=NULL)?

r:

s;

while(t!

=NULL){

num=t->

t=t->

if(carry!

=0){

data=carry;

return(head);

voidmain(){

LNode*head1,*head2,*head3;

pleaseputanumber\n"

head1=creat();

pleaseputanotherone\n"

head2=creat();

head3=Creat(head1,head2);

print(head3);

二、算术表达式求值

用栈的形式实现算数表达式的求值。

利用给定的运算符的优先关系,实现对四则混合运算表达式的求值,并能演示在求值过程中运算符栈、操作数栈和主要操作的变化过程。

(1)利用给定的运算符的优先级关系,对算术四则混合运算的表达式

的求值。

(2)演示程序以用户和计算机对话的形式进行,即在计算机的终端显

示“提示信息”之后,由用户在键盘上输入相应的信息,以字符序列

的形式从终端输入语法正确且不含变量的整数表达式最后以“#”键

来结束。

(1)字符栈的抽象数据类型定义:

ADTstack{

数据对象:

D={Ai|Ai∈Charset,i=1,2,3,…n,n>

=0}

数据关系:

R={<

Ai-1,Ai>

|Ai-1,Ai∈D,i=2,3,…n}

基本操作:

Initstack(&

S)

操作结果:

构造一个空栈S。

    Destorystack(&

初始条件:

栈S已经存在。

栈S被摧毁。

Push(&

S,e)

插入元素e作为新的栈顶元素。

Gettop(S,&

e)

用e返回栈S的栈顶的元素。

Pop(&

S,&

删除栈S的栈顶的元素,并且用e返回其值。

(2)整型栈的抽象数据类型定义:

ADTIntstack{

D={Ai|Ai∈Intset,i=1,2,3,…n,n>

IntInitstack(&

IntPush(&

IntGettop(S,&

IntPop(&

(1)主程序模块

Voidmain()

{

初始化;

实现表达式的求值;

输出结果;

(2)操作符栈模块——实现字符栈抽象数据类型的实现。

(3)操作数栈模块——实现整型栈抽象数据类型的实现。

(4)功能模块——实现表达式的求值。

主程序模块

功能模块

操作符模块操作数模块

(1)刚开始由于对问题分析的不透彻导致只用了一种抽象数据类型,经过几次测试结果只要一超过128就开始出现错,最后经过考虑又增加了intstack这种数据类型来存放操作数,而使问题得到的解决。

(2)本次程序的模块的设计不太合理,导致在写函数调用的时候很麻分;

改进方法:

将一组相关的函数操作封装在一起。

⑴3+9*8+8*(6+89-8+52)/2#

⑵21*89+89+12/(1+3)-45+9#

经过对程序的设计使自己对栈后进先出的特点有了更深的理解,同时

可以根据运行结果所出的错,去大致的推测程序的一些逻辑错误,也

可以一边给程序加上一些输出标志,慢慢的推断程序到底是在那部分

出了错误,提高了自己对程序逻辑错误的认识,从而使自己的改程序

的能力得到了提高,也积累了宝贵的编程经验。

#include<

iostream.h>

#defineSTACKSIZE100

#defineSTACKMORE10

typedefstructstack{

char*base;

char*top;

intstacksize;

}stack;

typedefstructintstack{

int*base;

int*top;

}intstack;

voidinitstack(stack&

s)

{

s.base=(char*)malloc(STACKSIZE*sizeof(char));

if(!

s.base)cout<

<

"

error"

endl;

s.top=s.ba

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1