数据结构长整数四则运算(DOC)

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

实习1 1.4长整数四则运算

实习报告

题目:设计一个实现任意长的整数进行加法运算的演示程序。

一、需求分析

1.本演示程序中,利用双向循环链表实现长整数的存储,每个结点含一个整型变量任何整型变量的范围是-(215-1)—(215-1)。在每个结点中仅存十进制数的4位,即不超过9999的非负整数,整个链表表示为万进制数。输入和输出形式按中国对于长整数的习惯,每四位一组,组间用逗号隔开。

2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据(滤去输入数据中的非法字符)和运算结果显示在其后。

3.程序执行的命令包括:

(1)构造链表;(2)输入数据;(3)数据处理;(4)结束

4.测试数据

(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。

二、概要设计

struct LinkNode //定义结构体LinkNode

{

int data; //记录每个节点的整数(小于10000)

LinkNode *next; //记录下一个节点的地址

LinkNode *pre; //记录前一个节点的地址

};

class LinkList //定义类LinkList

private:

LinkNode *head0,*head1; //head0,head1分别记录两个整数链表的头指针LinkNode *currptr;

LinkNode *result; //result记录结果链表的头指针

public:

LinkList(); //构造函数,初始化链表

~LinkList(); //析构函数,释放空间

void Creat(string a); //引入字符串,创立两个链表,分别表示两个整数

void Add(); //实现两个整数相加

void Display(); //显示结果

void addtwo(); //节点多的作为被加数,少的作为加数,实现整 //数绝对值

大的加小的

};

void main() //主函数

……

do{

} while(Yes_No=='y'||Yes_No=='Y'); //Yes_No不等于'Y'或'y'时,程序退出

}

三、详细设计

#include

#include

#include

using namespace std;

struct LinkNode

{

int data; //记录每个节点的整数(小于10000)

LinkNode *next; //记录下一个节点的地址

LinkNode *pre; //记录前一个节点的地址

class LinkList

{

private:

LinkNode *head0,*head1; //head0,head1分别记录两个整数链表的头指针LinkNode *currptr;

LinkNode *result; //result记录结果链表的头指针

public:

LinkList(); //构造函数,初始化链表

~LinkList(); //析构函数,释放空间

void Creat(string a); //引入字符串,创立两个链表,分别表示两个整数

void Add(); //实现两个整数相加

void Display(); //显示结果

void addtwo(); //节点多的作为被加数,少的作为加数,实现整 //数绝对值

大的加小的

};

//链表的实现部分

int sum(int n);

LinkList::LinkList() //构造函数,初始化链表

{

head0=new LinkNode;

//申请一个空间记录整数的符号和节点数

head1=new LinkNode;

head0->next=head0;

head0->pre=head0; //初始化链表,建立双向循环链表

head1->next=head1;

head1->pre=head1;

result=new LinkNode;

result->next=result;

result->pre=result;

currptr=NULL;

}

LinkList::~LinkList() //析构函数,释放空间{

LinkNode *p1=head0,*p2=head1,*p3=result;

//三个指针分别指向三条链表的头指针

while(p1!=p1->pre)

{

p1->pre->next=p1->next;

p1->next->pre=p1->pre;

currptr=p1;

p1=p1->next;

delete currptr;

}

while(p2!=p2->pre) //逐个删除节点,释放空间{

p2->pre->next=p2->next;

p2->next->pre=p2->pre;

currptr=p2;

p2=p2->next;

delete currptr;

}

while(p3!=p3->pre)

{

p3->pre->next=p3->next;

p3->next->pre=p3->pre;

currptr=p3;

相关文档
最新文档