1、数据结构课程设计报告 题目:长整数四则运算题目:长整数四则运算 一、一、需求分析需求分析 1.1.问题描述:问题描述: 由于工程上有时候需要对很大的数进行计算,但是计算机本身提供的数据类型无法保 存几百位甚至几千位的数字,所以需要设计专门的算法对数据进行相应的计算。此程序的 设计任务是:设计一个程序能够实现长整数运算的程序,而且能够对一些错误异常进行辨 别调整,计算出正确的结果。程序输入格式是字符串,保存时需要用双向循环链表将字符 串每四位保存在循环链表中的一个节点中,然后再计算后运行出结果。 2.2.基本功能基本功能 功能一:建立双向循环链表,计算链表个数,对链表的数据进行修改,能在链表中插
2、入结 点。 功能二:将字符串转换成相应的数字存储在双向循环链表中 功能三:对存入双向循环链表的长整数进行相加,相减,相除。 3.3.输入输出输入输出 程序输入以字符串的形式输入, 数据的类型是字符串, 包含元素的范围是数字, 逗号, 负号。 输入时用字符串输入,输出时以一链表结点输出,而且每个结点表示四位。 二、二、概要设计概要设计 1.1.设计思路:设计思路: 由于计算机无法完成位数很大的数字计算, 设计思路就是将很长的数据进行分割, 一部 分一部分的用计算机固有数据类型进行计算。 将各部分的结果整合起来。 由于计算机固有的 整数类型存数的对大整数是215-1,所以为了方便,且符合中国人对长
3、整数的表示习惯, 建立一个双向循环链表,每个结点存储四位数字,以万为进制。从最低位开始加法,超过一 万向上进位,所以每次加法应该是对应两个结点和进位数相加,进位值初始为0;减法也是 一个结点计算一次, 每次计算应该是第一个链表对应的结点值减去第二个结点的值和借位值 的和,借位值初始值为0;除法的计算可以借助减法,被减数被减数减一次则最终结果加一; 直至被减数比减数小。 2.2.数据结构设计:数据结构设计: 因为计算的是一个连续的数字, 需要桉顺序一次计算, 所以采用的数据结构的逻辑结构 是线性表。因为要求每一个结点只存储四位数字,为了将数字连接起来,采用的数据结构的 存储结构是链式。 1双向循
4、环链表的抽象数据类型定义为:双向循环链表的抽象数据类型定义为: ADT Link 数据对象:D=ai | aiCharSet,i=1,2,n,n0 数据关系; R= | ai-1,aiD,i=2,n 基本操作: InitLinkList( typedef int Status; typedef int BOOL; typedef struct LNode Elemtype data; LNode *next; LNode *prior; Node,*Link; void InitLinkList(Link /动态分配存储空间 If(!L) return FALSE; if(a = -) L-data = -1;/L-data存放符号节点,如果是-则为,否则为0 else L-data = 1; L-prior = L; L-next = L; Status DestroyList(Link /链表不存在 p = L-prior;/p指向链表头节点的前驱 while(p!=L)/删除节点节点p q