计算机基础算法实验Word格式文档下载.docx
- 文档编号:20584914
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:12
- 大小:97.90KB
计算机基础算法实验Word格式文档下载.docx
《计算机基础算法实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机基础算法实验Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
如:
输入6.4和3.2,输出结果为9-46。
根据实际情况的需要,可以将整数的长度定义为1000位,甚至更长。
5.总结
(1)熟悉掌握链表的建立及调用,同时对数组的理解进一步加深;
(2)认识到自己的不足,以后多加练习,争取写出更好的算法。
实验内容:
源程序:
#include<
stdio.h>
conio.h>
malloc.h>
#defineMAX100
typedefstructLNode
{
intdata;
structLNode*pre,*next;
}LNode,List;
LNode*CreatList()
LNode*p,*q,*r;
chars[MAX];
inti=0;
printf("
输入一个整数:
"
);
gets(s);
p=(LNode*)malloc(sizeof(List)*MAX);
q=r=p;
p->
data=-1;
while(s[i]!
=NULL)
q=(LNode*)malloc(sizeof(List));
q->
data=s[i++]-'
0'
;
pre=r;
r->
next=q;
r=q;
}
next=NULL;
returnp;
LNodeAdd(LNode*t1,LNode*t2)
while(t1->
data!
=-1&
&
t2->
=-1)
t1->
data=t1->
data+t2->
data;
if(t1->
data>
9)
data-=10;
pre->
data+=1;
t1=t1->
pre;
t2=t2->
next->
return*t1;
LNode*Compare(LNode*p1,LNode*p2)
LNode*s1=p1->
next,*s2=p2->
next,*t1,*t2;
inti=0,j=0;
while(s1!
{t1=s1;
s1=s1->
next;
i++;
while(s2!
{t2=s2;
s2=s2->
j++;
if(i>
=j)Add(t1,t2);
elseAdd(t2,t1);
returni>
=j?
p1:
p2;
voidprint(LNode*L)
LNode*p;
两整数的和为:
if(L->
=-1)printf("
%d"
1);
p=L->
do
p->
data);
p=p->
while(p!
=NULL);
\n"
intmain()
LNode*p1,*p2,*p3;
p1=CreatList();
p2=CreatList();
p3=Compare(p1,p2);
print(p3);
getch();
return0;
运行结果:
示例
6541
212354
218895
运行效果图为:
算法2算术表达式求值
课程设计任务是以字符序列的形式从终端输入语法正确的、不含变量的整数表达式,利用给定的算符优先关系,实现对算术四则混合运算表达式的求值,并演示在求值过程中运算符栈、操作数栈、操作数栈和主要操作的变化过程。
不含变量的整数表达式,算术四则混合运算表达式。
表达式。
StatusInitStack(SqStack&
S)操作结果:
构造一个空栈S。
StatusGetTop(SqStackS)初始条件:
栈S存在且非空。
用e返回S的栈顶元素.
StatusPush(SqStack&
S,ElemTypee)初始条件:
栈S已存在。
插入元素e为新的栈顶元素.
StatusPop(SqStack&
S,ElemType&
e)初始条件:
栈S存在且非空.操作结果:
删除S的栈顶元素,用e返回其值,并返回OK;
否则返回ERROR.
设计算法时,应考虑到运算符的优先关系,依此思想进行设计;
该算法的时间复杂度为O(n),n为栈的长度;
5.总结
(1)通过该算法了解到自己对栈的理解不是很到位,因此以后要加强这方面的练习,遇到类似问题时,不会束手无策;
(2)该算法是参考资料加上自己的理解所得,学到了不少的东西,收获也不小。
#include<
stdlib.h>
#defineOVERFLOW-1
#defineOK0
#defineERROR1
typedefintStatus;
#defineSTACK_INIT_SIZE100//初始分配量
#defineSTACKINCREMENT10//存储空间的分配增量
typedefcharElemType;
typedefElemTypeOperandType;
//操作数
typedefcharOperatorType;
typedefstruct
ElemType*base;
ElemType*top;
intstacksize;
}SqStack;
S)
//构造一个空栈S
S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!
S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
returnOK;
StatusGetTop(SqStackS){
ElemTypee;
if(S.top==S.base)returnERROR;
e=*(S.top-1);
returne;
S,ElemTypee)
//插入元素e为新的栈顶元素
if(S.top-S.base>
=S.stacksize){
S.base=(ElemType*)realloc(S.base,
(S.stacksize+STACKINCREMENT)*sizeof(ElemType));
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
e){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;
否则返回ERROR
if(S.top==S.base)returnERROR;
e=*--S.top;
charIn(charc,charOP[])
if(c>
=35&
c<
=47)
return1;
elsereturn0;
charOP[8]={'
+'
'
-'
*'
/'
('
)'
#'
\0'
};
intm[7][7]=
{1,1,2,2,2,1,1,
1,1,2,2,2,1,1,
1,1,1,1,2,1,1,
2,2,2,2,2,0,-1,
1,1,1,1,-1,1,1,
2,2,2,2,2,-1,0};
charPrecede(chari,charj)
inta,b;
char*p;
for(p=OP,a=0;
*p!
='
p++,a++)
if(*p==i)break;
for(p=OP,b=0;
p++,b++)
if(*p==j)break;
if(m[a][b]==1)return'
>
'
elseif(m[a][b]==2)return'
<
elseif(m[a][b]==0)return'
elsereturn'
O'
charOperate(chara,chartheta,charb)
if(a>
47)a=atoi(&
a);
if(b>
47)b=atoi(&
b);
switch(theta)
{
case'
:
returna+b;
break;
returna-b;
returna*b;
returna/b;
OperandTypeEvaluateExpression()
SqStackOPTR,OPND;
OperandTypea,b,c;
OperatorTypetheta;
InitStack(OPTR);
Push(OPTR,'
InitStack(OPND);
c=getchar();
while(c!
||GetTop(OPTR)!
)
{
if(!
In(c,OP)){Push(OPND,c);
c=getchar();
else
switch(Precede(GetTop(OPTR),c))
:
Push(OPTR,c);
c=getchar();
Pop(OPTR,c);
Pop(OPTR,theta);
Pop(OPND,b);
Pop(OPND,a);
Push(OPND,Operate(a,theta,b));
returnGetTop(OPND);
voidmain()
printf("
(以#为结束符)\n"
请输入:
inta;
a=(int)EvaluateExpression();
a);
getch();
(以#为结束符)
4*(2+3)-4#
16
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 基础 算法 实验