计算机算法实验报告

这篇实验报告详细介绍了如何使用链表实现两个长整数的相加,通过链表节点存储每个数字位。算法描述了如何处理进位和合并链表的过程。此外,报告还涵盖了算术表达式求值的实验,涉及运算符栈和操作数栈的使用,以及四则混合运算的优先级处理。在调试过程中,作者发现了进制问题、变量指针使用及代码逻辑错误等常见问题,并成功解决,加深了对栈特性和程序逻辑的理解。
摘要由CSDN通过智能技术生成

一、两个长整数相加
1.实验任务
要求用链表(单链表或双向链表)实现两个任意位数的整数相加。例如,为存储100位的整数可以建立有100个结点的单链表,每个结点存储1位(如果每个结点存储4位,建立25个结点的单链表也可以)。
2.变量说明
x 第一个长整数
y 第二个长整数
L 两个长整数的和
p 指向L的next指针
LNode 单链表类型
L,L1,L2 单向链表
*head 指向链表的头指针
*next 链表结点指针域
m 整数类型,表示进位
s,t 整数类型
3.算法描述
Status MergeList_List(LinkList &La, LinkList &Lb, LinkList &Lc)
int( * compare)(ElemType,ElemType)){
//已知单链表线性表La和Lb的元素按值非递减排列
//归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列。
if (!InitList(Lc)) return ERROR; //存储空间分配失败
ha=GetHead(La); hb=GetHead(Lb); //ha和hb分别指向La和Lb的头结点
pa=NextPos(La,ha); pb=NextPos(Lb,hb); //pa和pb分别指向La和Lb中当前结点
while(pa&&pb){ //La和Lb均为非空
a=GetCurElem(pa); b=GetCurElem(pb); //a和b为两表中当前比较元素
if((*compare)(a,b)<=0){ //a<=b
DelFirst(ha,q); Append(Lc,q);pa=NextPos(La,ha);}
else{ //a>b
DelFirst(hb,q); Append(Lc,q); pb=NextPos(Lb,hb);}
}//while
if(pa) Append(Lc,pa); //链接La中剩余结点
else Append(Lc,pb); //链接Lb中剩余结点
FreeNode(ha); FreeNode(hb); //释放La和Lb的头结点
return OK;
}//Merge List-L
4.程序流程图

程序:
#include<stdio.h>
#include<malloc.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList CreateList_L()
{
int i;
char m;
struct LNode *p,*L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
m=getchar();
while(m!=’\n’)
{
LinkList p;
p=(LinkList)malloc(sizeof(LNode));
p->data=m-‘0’;
p->next=L->next;
L->next=p;
m=getchar();
}
return L;
}
LinkList add(LinkList &L1,LinkList &L2)
{
LinkList s,t,L,p;
int f,m;
f=0;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
s=L1->next;t=L2->next;
while(s&&t)
{
p=(LinkList)malloc(sizeof(LNode));
m=s->data+t->data+f;
if (m>9){
m=m-10;f=1;}
else f=0;
p->data=m;
p->next=L->next;
L->next=p;
s=s->next;t=t->next;
}

while(s)
{
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上官怜云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值