建立一个带头节点的线性链表,用以存放输入的二进制数,链表中每个节点的data域存放一个二进制位。并在此链表上实现对二进制数的加1运算。
算法分析:
约定:以输入一个非0,1的数字作为一个二进制数的结束标志
由于是单链表,即只能通过一个方向进行遍历,但是为了模拟加法操作,即必须要在表尾进行加1操作并要准确的考虑进位,所以我们利用链表的逆置,即先逆置,再加1,再逆置,即可方便的实现二进制数的加1操作。
代码实现:
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode,*LinkList;
LinkList Create()
{
LinkList head;
head=(LinkList)malloc(sizeof(LNode));
if(head!=NULL)
{
head->next=NULL;
return head;
}
else return NULL;
}
int GetElem(LinkList L,int i,ElemType &e)
{
LinkList p; //LNode *p;
p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j