#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");
l=createfromhead(l);
PrintList(l);
printf("結果為");
Binadd(l);
PrintList(l);
}
typedef struct Node
{
int data;
struct Node *next;
}Node,*LinkList;
int CreatLinkList(LinkList L)//尾插法建表
{
int ch;
Node *s;
Node *r;
r=L;
while(true)
{
cin>>ch;
if(ch==999)
break;
else
{
s=new Node;
s->data=https://bbs.csdn.net/topics/ch;
r->next=s;
r=s;
}
r->next=NULL;//這句不能少了,少了就會崩潰
}
return 0;
}
int add(LinkList L)//加1原則:從地位向高位找第一個出現的0,把此0改為1,然后把后面地位的全部改為0
{
Node *p,*r;
r=L;
p=L->next;
while(p!=NULL)
{
if(p->data=https://bbs.csdn.net/topics/=0)
r=p;
p=p->next;
}
if(r!=L)//說明二進制數中有0
{
r->data=https://bbs.csdn.net/topics/1;
while(r->next!=NULL)
{
r->next->data=https://bbs.csdn.net/topics/0;
r=r->next;
}
r->data=https://bbs.csdn.net/topics/0;
}
else
{
Node *temp;
temp=new Node;
temp->next=L->next;
r->next=temp;
temp->data=https://bbs.csdn.net/topics/1;
r=temp->next;
while(r!=NULL)
{
r->data=https://bbs.csdn.net/topics/0;
r=r->next;
}
}
return 0;
}
int main()
{
LinkList L1;
L1=new Node;
L1->next=NULL;
CreatLinkList(L1);
add(L1);
Node *p;
p=L1->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/193140.html
標籤:C++ 語言
上一篇:楊輝三角佇列
