数据结构大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计
题目:长整数四则运算
班级:信管12-1
学号:1201050642
姓名:庄术洁
指导老师:刘晓庆
2014年5月22日
一、需求分析
1、利用双向循环链表实现长整数的存储,每个结点含一个整数变量。任何整形变量的范围是—(2^15—1)~(2^15—1)。输入和输出形式:按中国对于长证书的表示习惯,每四位一组,组间用逗号隔开。
2、测试数据
(1) 0; 0;应输出“0”
(2)—2345,6789;—7654,3211;应输出“—1,0000,0000”。
(3)—9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。
(4)1,0001,0001;—1,0001,0001;应输出“0”。
(5)1,0001,0001;—1,0001,0000;应输入“1”。
(6)—9999,9999,9999;—9999,9999,9999;应输出“—1,9999,9999,9998”。
(7)1,0000,9999,9999;1应输出“1,0001,0000,0000”。
二、概要设计
为上述程序功能,应以有序表实现长整数的存储,为此,需要抽象数据类型:有序表
(8)有序表的抽象数据类型定义为:
ADT Dulinklist{
数据对象: D={ai|ai为带符号整数,1,2,…,n,n>=0}
数据关系:R1={ 基本操作: InitDulinklist(&) 操作结果:构造一个空的有序表L DestroyDulinklist(&) 初始条件:有序表L已存在 操作结果:销毁有序表L DulinklistLength(L) 初始条件:有序表L已存在 操作结果:返回有序表L的长度 DulinklistEmpty(L) 初始条件:有序表L已存在 操作结果:若有序表L为空表,则返回TUER,否则返回FALSE GetElem(L,pos) 初始条件:有序表L已存在 操作结果:若干1〈=POS〈=LENGTH(L),则返回有序表L 中第POS个数据元素。 Append(&L,e) 初始条件:有序表L已存在 操作结果:在有序表L的末尾插入元素e }ADT Dulinklist 3.本程序包含三个模块: 1)主程序模块: 2)有序表单元模块——实现有序表的抽象数据类型; 3)结点结构单元模块——定义有序表的结点结构 各模块之间的调用关系如下: 主程序模块 ↓ 有序表单元模块 ↓ 结点结构单元模块 typedef struct DoubleNode //定义链表元素 void InitNode(DLNode **head) //初始化链表 int InsertNode(DLNode *head,int n,DataType x) //向链表第N个位置插入元素X int digit(int n) //判断整数N有几位 void PrintNode(DLNode *head) //打印链表 void DestroyNode(DLNode **head)//销毁链表 void add(DLNode *h1,DLNode *h2) //两数相加 void jian(DLNode *h1,DLNode *h2) //两数相减 int main() //入口函数 四、调试分析 由于在程序设计时,对于指针的不了解,编程时使用双重指针,无形中给自己增添了更多麻烦。老师在检查的过程中指出并教导了这一点 五.用户手册 1.本程序的运行环境为DOS操作系统,执行文件为: 2.进入演示程序后即显示有提示的用户界面: 六.测试结果 (1)输入0和0时输出“0” (2)输入-2345,6789和-7654,3211时输出“-1,0000,0000” (3)输入-9999,9999和1,0000,0000,0000时输出“9999,0000,0001”(4)输入1,0001,0001和-1,0001,0001 时输出“0” (5)输入1,0001,0001和-1,0001,0000时输出“1”(6)输入-9999,9999,9999和-9999,9999,9999时输出“-1,9999,9999,9998” (7)输入1,0000,9999,9999和1时输出“1,0001,0000,0000” 七、附录 #include #include #include #include #define N 100 typedef int DataType; typedef struct DoubleNode //定义链表元素 { DataType data; struct DoubleNode *prior; struct DoubleNode *next; }DLNode; void InitNode(DLNode **head) //初始化链表 { if((*head=(DLNode*)malloc(sizeof(DLNode)))==NULL)