//單鏈表二進制加一
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
//單鏈表的定義
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}node,*linklist;
//單鏈表的初始化
void initlist(linklist *l)
{
*l=(linklist)malloc(sizeof(node));
(*l)->next=NULL;
}
//頭插法建立單鏈表
void createfromhead(linklist l)
{
node *s;
char c;
int flag=1;
while(flag)
{
c=getchar();
if(c!='2')
{
s=(node*)malloc(sizeof(node));
s->data=https://bbs.csdn.net/topics/c;
s->next=l->next;
l->next=s;
}
else
flag=0;
}
}
//單鏈表二進制加1運算
void Binadd(linklist l)
//用帶頭結點的單鏈表l存盤二進制數,實作加1運算
{
node *q,*r,*s;
q=l->next;
r=l;
while(q!= NULL)
//查找最后一個值域為0的結點
{
if(q->data=https://bbs.csdn.net/topics/=0)
r=q;
q=q->next;
}
if(r!=l)
r->data=https://bbs.csdn.net/topics/ 1;/*將最后一個值域為0的結點的值賦為1*/
//未找到值域為0的結點
else
{
s=( node*) malloc(sizeof(node));/* 申請新結點存放最高進位 */
s->data=https://bbs.csdn.net/topics/ 1; /*值域賦為1*/
s->next= l->next;
l->next=s; /*插入到頭結點之后*/
r=s;
}
r=r->next;
while(r!=NULL)//將后面的所有結點的值城賦為0
{
r->data=https://bbs.csdn.net/topics/0;
r= r->next;
}
}
void PrintList(linklist l)
{
linklist p=l->next;
while(p)
{
printf("%c",p->data);
p=p->next;
printf("\n");
}
}
void main()
{
linklist l;
initlist(&l);
printf("輸入鏈表元素\n");
createfromhead(l);
PrintList(l);
printf("結果為");
Binadd(l);
PrintList(l);
}
怎么用單鏈表實作二進制加一運算呀,題目為,,建立一個帶頭結點的線性鏈表,用以存放輸人的二進制數,鏈表中每個結點的data域存放一個二進制位。 并在此鏈表上實作對二進制數加 1的運算
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/191242.html
標籤:C++ 語言
上一篇:不懂,有沒有人看看怎么改
下一篇:小白求教
