天天看点

C语言 链表写入二进制文件,用C语言编写,建立 一个带头结点的线性链表,用以存放输入的二进制数,链表中每个结点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算。...

满意答案

C语言 链表写入二进制文件,用C语言编写,建立 一个带头结点的线性链表,用以存放输入的二进制数,链表中每个结点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算。...

h44dkpra

2013.04.20

C语言 链表写入二进制文件,用C语言编写,建立 一个带头结点的线性链表,用以存放输入的二进制数,链表中每个结点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算。...

采纳率:54%    等级:12

已帮助:8452人

#include

#include

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*LinkList;

void InitList(long i,LinkList &list)

{

list=(LinkList)malloc(sizeof(LNode));

list->next=0;

LinkList p;

long t=i;

while(t!=0)

{

p=(LinkList)malloc(sizeof(LNode));

p->data=t%10;

p->next=list->next;

list->next=p;

t=t/10;

}

}

void displaylist(LinkList list)

{

LinkList p=list->next;

while(p)

{

printf("%d",p->data);

p=p->next;

}

printf("\n");

}

void addone(LinkList &list)

{

LinkList p=list->next;

LinkList p1,p2;

//下面这处理全1的情况:

while(p)

{

p1=p;

if(p->data==0) break;

p=p->next;

}

if(p==NULL)

{

LinkList p3=(LinkList)malloc(sizeof(LNode));

p3->data=1;

p3->next=NULL;

p1->next=p3;

return ;

}

//下面是一般的处理情况:

p=list->next;

while(p)

{

p1=p;

p=p->next;

}

if(p1->data+1==1)

{

p1->data+=1;

return ;

}

else if(p1->data+1==2)

{

p=list->next;

while(p)

{

if(p->data==0)

{

p2=p;

}

p=p->next;

}

p2->data=1;

p=p2->next;

while(p)

{

p->data=0;

p=p->next;

}

return ;

}

}

int main()

{

LinkList list;

long i;

scanf("%ld",&i);

if(i==0)

{

printf("你输入的数为:\n%d\n",i);

printf("加1后得:\n1\n");

return 0;

}

InitList(i,list);

printf("你输入的数为:\n");

displaylist(list);

addone(list);

printf("加1后得:\n");

displaylist(list);

return 0;

}

00分享举报