问答题 编写程序,要求完成:(1)建立一个带头结点的线性链表,用以存放输入的二进制数,链表中每个结点的data域存放一个二进制位。(2)在此链表上实现对二进制数加1的运算,并输出运算结果。【西北大学2002七(10分)】
【正确答案】正确答案:为处理方便,结点数据为字符型,用带头结点的双循环链表存储。用尾插法建立链表。实现二进制数加1的运算时,若尾结点为‘0’,则变为‘1’;否则,将产生进位,极端情况下,进位一直扩展到最高位,发生“溢出”,这时要增加一个结点,存储进位。建表的核心语句段如下: la=new(DLNode);la一>prior=la一>next=null ;pre=la; //建空链表 while((cin<data=ch;P一>prior=pre;P一>next=pre一>next; pre一>next=p;la一>prior=p;pre=p; //将新结点链入表尾 } 在此链表上实现对二进制数加1运算的核心语句段如下: while(p!=la&&P一>data==’1。) //初值p=la一>prior,指向尾结点 (P一>data=‘0’;p=p->prior;) if(p!=la)P一>data="1"; //修改字符零的数据域并结束 else//产生进位 {p=new(DLNode);P一>data=‘1’; //建立新结点 P一>prior=la;P一>next=la一>next; //将新结点链入作为首元结点 1a->next一>prior=p; 1a->next=p; } 输出运算结果的核心语句段如下: while(p!=1a) //初值p=1a一>next;指向首元结点 {cout<data; P=p一>next;)cout<
【答案解析】