欢迎来到天天文库
浏览记录
ID:6380286
大小:69.12 KB
页数:16页
时间:2018-01-12
《数据结构实验报告1》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数据结构实验报告一——1.4长整数的四则运算电信提高0901班吕祺U200913911一.需求分析1.本程序中采用双向链表实现对长整数的存储与运算,每个节点含一个整型变量,每四位一组,组间可用逗号隔开。2.程序由用户输入数据(长整数可正可负),选择加法或减法运算,计算机计算出结果并反馈。3.程序由多个函数组成,函数见概要设计。二.概要设计本实验采用双向链表实现长整数存储。抽象数据类型定义:ADTLNode{数据对象:整型数数据关系:R1={
2、ai-1,ai∈D,ai-13、,3…,n}}ADTLNode2.链表的抽象数据类型:ADTList{:D={ai4、ai∈DSLNode,i=1,2,..n,n≥0}数据关系:R1={5、ai-1,ai∈D,ai-16、}ADTList1.每个节点只存储四位十进制数字,即不超过9999的非负整数,在本程序中若超过9999也可能得到正确结果,但不是标准的形式。2.双向链表有头指针,它的data值存储长整数的符号,-1为负,正数时直接存储第一个节点的值3.其他节点的data值存储四位整数4.尾节点指向NULL而非头结点,因为没有必要循环,且判断结束的标志可以为尾指针为空.还需要包含调用若干库文件:stdio.h,malloc.h等。三.详细设计1.宏定义及节点定义:#defineElemTypeinttypedefstr7、uctLNode{ElemTypedata,carryin;//carryin为进位,有进位时为一,也可为借位structLNode*next,*prior;}*Link;typedefstruct{Linkhead;Linktail;//头为指针为LNode型}list;2.初始化链表函数:函数C代码:voidInitlist(list&L){structLNode*p;if((p=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);L.head=L.tail=8、p;}3.赋值函数设计思路voidCreatlist(list&L){char*a;charss[1];a=ss;Initlist(L);structLNode*k;if((k=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);cin>>k->data>>*a;//a只能为逗号或者分号,分号代表结束if(k->data>0){L.head=L.tail=k;L.tail->next=NULL;L.tail->prior=NULL;//若为正数直接设之为头结点wh9、ile(*a!=';')//输入不为‘;’时不断循环{structLNode*q;if((q=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);cin>>q->data>>*a;if(q->data>1000010、11、q->data<0)exit(0);if(*a==';'){L.tail->next=q;q->prior=L.tail;L.tail=q;L.tail->next=NULL;break;}q->prior=L.tail;L.tail->next=q;12、L.tail=L.tail->next;}//while}//if(k->data>0)else{L.head->data=-1;L.head->next=(LNode*)malloc(sizeof(LNode));L.tail=L.head->next;//头结点数据域设为-1L.tail->data=-1*k->data;L.tail->prior=L.head;L.tail->next=NULL;L.head->prior=NULL;while(*a!=';'){structLNode*q;if13、((q=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);cin>>q->data>>*a;if(q->data>1000014、15、q->data<0)exit(0);if(*a==';')输入为‘;’时结束循环{L.tail->next=q;q->prior=L.tail;L.tail=q;L.tail->next=NULL;break;}q->prior=L.tail;L.tail->next=q;L.tail=L
3、,3…,n}}ADTLNode2.链表的抽象数据类型:ADTList{:D={ai
4、ai∈DSLNode,i=1,2,..n,n≥0}数据关系:R1={
5、ai-1,ai∈D,ai-16、}ADTList1.每个节点只存储四位十进制数字,即不超过9999的非负整数,在本程序中若超过9999也可能得到正确结果,但不是标准的形式。2.双向链表有头指针,它的data值存储长整数的符号,-1为负,正数时直接存储第一个节点的值3.其他节点的data值存储四位整数4.尾节点指向NULL而非头结点,因为没有必要循环,且判断结束的标志可以为尾指针为空.还需要包含调用若干库文件:stdio.h,malloc.h等。三.详细设计1.宏定义及节点定义:#defineElemTypeinttypedefstr7、uctLNode{ElemTypedata,carryin;//carryin为进位,有进位时为一,也可为借位structLNode*next,*prior;}*Link;typedefstruct{Linkhead;Linktail;//头为指针为LNode型}list;2.初始化链表函数:函数C代码:voidInitlist(list&L){structLNode*p;if((p=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);L.head=L.tail=8、p;}3.赋值函数设计思路voidCreatlist(list&L){char*a;charss[1];a=ss;Initlist(L);structLNode*k;if((k=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);cin>>k->data>>*a;//a只能为逗号或者分号,分号代表结束if(k->data>0){L.head=L.tail=k;L.tail->next=NULL;L.tail->prior=NULL;//若为正数直接设之为头结点wh9、ile(*a!=';')//输入不为‘;’时不断循环{structLNode*q;if((q=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);cin>>q->data>>*a;if(q->data>1000010、11、q->data<0)exit(0);if(*a==';'){L.tail->next=q;q->prior=L.tail;L.tail=q;L.tail->next=NULL;break;}q->prior=L.tail;L.tail->next=q;12、L.tail=L.tail->next;}//while}//if(k->data>0)else{L.head->data=-1;L.head->next=(LNode*)malloc(sizeof(LNode));L.tail=L.head->next;//头结点数据域设为-1L.tail->data=-1*k->data;L.tail->prior=L.head;L.tail->next=NULL;L.head->prior=NULL;while(*a!=';'){structLNode*q;if13、((q=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);cin>>q->data>>*a;if(q->data>1000014、15、q->data<0)exit(0);if(*a==';')输入为‘;’时结束循环{L.tail->next=q;q->prior=L.tail;L.tail=q;L.tail->next=NULL;break;}q->prior=L.tail;L.tail->next=q;L.tail=L
6、}ADTList1.每个节点只存储四位十进制数字,即不超过9999的非负整数,在本程序中若超过9999也可能得到正确结果,但不是标准的形式。2.双向链表有头指针,它的data值存储长整数的符号,-1为负,正数时直接存储第一个节点的值3.其他节点的data值存储四位整数4.尾节点指向NULL而非头结点,因为没有必要循环,且判断结束的标志可以为尾指针为空.还需要包含调用若干库文件:stdio.h,malloc.h等。三.详细设计1.宏定义及节点定义:#defineElemTypeinttypedefstr
7、uctLNode{ElemTypedata,carryin;//carryin为进位,有进位时为一,也可为借位structLNode*next,*prior;}*Link;typedefstruct{Linkhead;Linktail;//头为指针为LNode型}list;2.初始化链表函数:函数C代码:voidInitlist(list&L){structLNode*p;if((p=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);L.head=L.tail=
8、p;}3.赋值函数设计思路voidCreatlist(list&L){char*a;charss[1];a=ss;Initlist(L);structLNode*k;if((k=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);cin>>k->data>>*a;//a只能为逗号或者分号,分号代表结束if(k->data>0){L.head=L.tail=k;L.tail->next=NULL;L.tail->prior=NULL;//若为正数直接设之为头结点wh
9、ile(*a!=';')//输入不为‘;’时不断循环{structLNode*q;if((q=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);cin>>q->data>>*a;if(q->data>10000
10、
11、q->data<0)exit(0);if(*a==';'){L.tail->next=q;q->prior=L.tail;L.tail=q;L.tail->next=NULL;break;}q->prior=L.tail;L.tail->next=q;
12、L.tail=L.tail->next;}//while}//if(k->data>0)else{L.head->data=-1;L.head->next=(LNode*)malloc(sizeof(LNode));L.tail=L.head->next;//头结点数据域设为-1L.tail->data=-1*k->data;L.tail->prior=L.head;L.tail->next=NULL;L.head->prior=NULL;while(*a!=';'){structLNode*q;if
13、((q=(LNode*)malloc(sizeof(LNode)))==NULL)exit(0);cin>>q->data>>*a;if(q->data>10000
14、
15、q->data<0)exit(0);if(*a==';')输入为‘;’时结束循环{L.tail->next=q;q->prior=L.tail;L.tail=q;L.tail->next=NULL;break;}q->prior=L.tail;L.tail->next=q;L.tail=L
此文档下载收益归作者所有