频道栏目
首页 > 资讯 > 其他 > 正文

链表应用----二进制数加1进位表示链表存储

17-01-21        来源:[db:作者]  
收藏   我要投稿

问题描述:建立一个带头结点的线性链表,用以存放输入的二进制数,链表的每一个data域存放一个二进制位,并在此链表上实现对二进制数加1的运算。

问题分析如图:

通俗解释就是,遍历链表找出一串二进制数最低位的0位,并记录下位置,此位置变1,后边位置的数变0,例如(1010110011)加1运算就变成(1010110011),若是111111满位1的数,就用头插法插入新结点存1,原来的链表data域全变0,111111就变成了1000000.

typedef struct Snode  
{  
    int data;  
    Snode *next;  
}Snode,*PSnode;  
void BinaryAddOne(PSnode&L)  
{                       //链表表头到表尾依次为高位到低位   
    PSnode Temp, q, p, s;  
    q = L->next;      //遍历查找的头指针  
    p = L;                
    s = NULL;         //查找0位的标记指针  
    while (q)  
    {  
        if (q->data==0)  
            s = q;      //记录从最高位开始的最后一个0位的位置  
        q = q->next;  
    }  
  
    if (s)  
    {  
        s->data = 1; //记录的位置变为1   
        s = s->next;  
        while (s)  
        {  
            s->data = 0;//其后边的1位全变为0  
            s = s->next;  
        }  
    }  
    else  
    {//Temp 为二进制位满1时新进位空间开辟指针 形如1 3 7 15等二进制表示的下一个高位  
        Temp = new Snode;  
        Temp->data = 1;          //采用头插法进行新进位的添加  
        Temp->next = p->next;  
        p->next = Temp;  
        Temp = Temp->next;  
        while (Temp)                //新进位后的所有1位全变为0  
        {  
            Temp->data = 0;  
            Temp = Temp->next;  
        }  
    }  
  
}
相关TAG标签
上一篇:字符串(String)
下一篇:PAT 1099. Build A Binary Search Tree (30)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站