数据结构课程设计报告长整数运算范文

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计报告长整数运算

数据结构课程设计报告

题目:长整数四则运算

一、需求分析

1.问题描述:

由于工程上有时候需要对很大的数进行计算,可是计算机本身提供的数据类型无法保存几百位甚至几千位的数字,因此需要设计专门的算法对数据进行相应的计算。此程序的设计任务是:设计一个程序能够实现长整数运算的程序,而且能够对一些错误异常进行辨别调整,计算出正确的结果。程序输入格式是字符串,保存时需要用双向循环链表将字符串每四位保存在循环链表中的一个节点中,然后再计算后运行出结果。

2.基本功能

功能一:建立双向循环链表,计算链表个数,对链表的数据进行修改,能在链表中插入结点。

功能二:将字符串转换成相应的数字存储在双向循环链表中功能三:对存入双向循环链表的长整数进行相加,相减,相除。

3.输入输出

程序输入以字符串的形式输入,数据的类型是字符串,包含元素的范围是数字,逗号,负号。

输入时用字符串输入,输出时以一链表结点输出,而且每个结点

表示四位。

二、概要设计

1.设计思路:

由于计算机无法完成位数很大的数字计算,设计思路就是将很长的数据进行分割,一部分一部分的用计算机固有数据类型进行计算。将各部分的结果整合起来。由于计算机固有的整数类型存数的对大整数是2^15-1,因此为了方便,且符合中国人对长整数的表示习惯,建立一个双向循环链表,每个结点存储四位数字,以万为进制。从最低位开始加法,超过一万向上进位,因此每次加法应该是对应两个结点和进位数相加,进位值初始为0;减法也是一个结点计算一次,每次计算应该是第一个链表对应的结点值减去第二个结点的值和借位值的和,借位值初始值为0;除法的计算能够借助减法,被减数被减数减一次则最终结果加一;直至被减数比减数小。

2.数据结构设计:

因为计算的是一个连续的数字,需要桉顺序一次计算,因此采用的数据结构的逻辑结构是线性表。因为要求每一个结点只存储四位数字,为了将数字连接起来,采用的数据结构的存储结构是链式。

1.双向循环链表的抽象数据类型定义为:

ADT Link

{

数据对象:D={ai | ai∈CharSet,i=1,2,……,n,n≥0}

数据关系; R={ | ai-1,ai∈D,i=2,……,n}

}

基本操作:

InitLinkList(&L,a)

操作结果:构造一个双向循环链表L ,用a判断是正数还是负数

DestroyList(&L)

初始条件:双向循环两已经存在

操作结果:销毁有序表L

Insert(&L,a)

初始条件:双向循环链表已经存在

操作结果:在循环链表的末尾插入一个结点,且此结点的数据值为a

HeadInsert(&L,a)

初始条件:双向循环链表已经存在

操作结果:在循环链表的头结点后插入一个结点,且此结点的数据值为a

CountNode(&L)

初始条件:双向循环链表存在

操作结果:计算出链表中结点的个数,并返回个数

Compare(&L1, &L2)

初始条件:L1和L2存在

操作结果:比较两个双向循环链表的大小,用返回值1表示L1大于L2,返回值-1标志L1小于L2,返回值0标志

L1和L2相等

ToNum(*s,i,&e)

初始条件:s为字符串中指向某个字符的指针

操作结果:将s的前i个字符转换为数字,存入e中CreatNum(&L,&s)

初始条件:s为某个字符串,双向循环链表L存在

操作结果:将字符串s转换成数字存入到循环链表L中

Add(L1,L2, op)

初始条件:双向循环链表L1和L2存在,op为结果的标识符操作结果:两个链表相加,求出结果。

Sub(L1,L2, op)

初始条件:双向循环链表L1和L2存在

操作结果:L1减去L2,求出结果,op为结果的标识符EraseZero(Link &L)

初始条件:双向循环链表L存在

操作结果:删去L链表头结点后,第一个数据不为零结点前的所有数据为零的结点。

如果结点数据都为零,则保存一个结点。

print(L)

相关文档
最新文档