1、(默认较长的数作为被加数、被减数)三、详细设计 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(DLNod
2、e *h1,DLNode *h2) /两数相减int main() /入口函数四、调试分析 由于在程序设计时,对于指针的不了解,编程时使用双重指针,无形中给自己增添了更多麻烦。老师在检查的过程中指出并教导了这一点。五、测试结果1、输入0和0做加法运算,输出“0”,结果如下图: 2、输入2345,6789和-7654,3211做减法运算,输出“1,0000,0000”,结果如下图:3、输入1,0000,0000,0000和9999,9999做减法运算,输出“9999,0000,0001”,结果如下图:4、输入1,0001,0001和1,0001,0001做减法运算,输出“0”,结果如下图:5、输
3、入1,1111和1,1111做减法运算,输出“0”结果如下图:六、心得体会本次实验主要是针对双向链表的练习,通过这次试验我们大家对于双向循环链表有了更深刻的记忆。另在讲解的过程中,老师指出了我们在编程中存在的不足点,我们对于指针跟双重指针有了更清晰的认识。在与同学的交流中,也更清楚的认清了 自己的不足,以后会更加努力的。七、附录#includestring.hstdlib.h #include#define N 100 typedef int DataType; typedef struct DoubleNode /定义链表元素 DataType data; struct DoubleNode
4、 *prior; struct DoubleNode *next; DLNode; void InitNode(DLNode *head) /初始化链表 if(*head=(DLNode*)malloc(sizeof(DLNode)=NULL) exit(1); (*head)-prior=*head;next=*head; int InsertNode(DLNode *head,int n,DataType x) /向链表第N个位置插入元素X DLNode *p,*nt; int i=0; p=head-next; while(p!=head&i i+; if(i!=n) printf(插入
5、位置错误n); return 0; if(nt=(DLNode *)malloc(sizeof(DLNode)=NULL) exit(1); nt-data=x; nt-prior=p-prior;prior-next=nt;next=p; p-prior=nt; return 1; int digit(int n) /判断整数N有几位 int i; for(i=1;n/=10,i+) if(n/10=0) return i; void PrintNode(DLNode *head) /打印链表 DLNode *p=head- while(p-data=0) /去掉前面的一串0 p=p- if
6、(p=head) printf(0n return;%d,p-data); /最前面的一个数进行特殊处理,不用补零 p=p- while(p!=head) /打印后面的数字 , if(p-data=0) 0000 continue; for(i=0;4-digit(p-i+) /补零 0 printf(n void DestroyNode(DLNode *head) DLNode *p,*p1; p=(*head)-=*head) p1=p; free(p1); free(p); head=NULL; DLNode *p1=h1-prior,*p2=h2-while(p1!=h1&p2!=h2
7、) /每个链表元素相加 p1-data+=p2-data ;p1=p1- p2=p2- p1=h1- while(p1!=h1-next) /处理链表元素 if(p1-data=10000) p1-data+=p1-data/10000; p1-data%=10000; if(p1-datanext!=0) p1-data-=1; p1-data+=10000; p1=p1- if(h1-next-=10000) /处理最前面的数 InsertNode(h1,0,h1-data/10000); h1- if(h1-=-10000) h1-data%=-10000; PrintNode(h1);
8、=h2) /每个链表元素相减data-=p2-p2=p2- p1=h1- if(p1-data/-10000); PrintNode(h1); DLNode *head1,*head2; InitNode(&head1);head2); char data1N,data2N; char d110,d210; int i,j,k; int xun;while(1) 输入数据:scanf(%s %s,data1,data2); InitNode(& i=0;k=0; while(data1i!=) /将数1用链表储存 for(j=0;jstrlen(data2) /较长的数作为被加数 add(head1,head2); else add(head2,head1); break; case 2:strlen(data2) /较长的数作为被减数 jian(head1,head2);else jian(head2,head1);default:break; DestroyNode(& return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1