建立一个带头结点的线性链表,用以存储输入的二进制数,链表中每个结点的data域存放一个二 进制位,并在此链表上实现对二进制数加1的运算。
时间: 2023-05-17 21:06:26 浏览: 79
可以使用以下代码实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createList() {
Node *head = (Node *)malloc(sizeof(Node));
head->data = 0;
head->next = NULL;
return head;
}
void addNode(Node *head, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = head->next;
head->next = newNode;
}
void printList(Node *head) {
Node *p = head->next;
while (p != NULL) {
printf("%d", p->data);
p = p->next;
}
printf("\n");
}
void addOne(Node *head) {
Node *p = head->next;
while (p != NULL) {
if (p->data == 0) {
p->data = 1;
break;
} else {
p->data = 0;
p = p->next;
}
}
if (p == NULL) {
addNode(head, 1);
}
}
int main() {
Node *head = createList();
int n;
printf("请输入二进制数的位数:");
scanf("%d", &n);
printf("请输入二进制数:");
for (int i = 0; i < n; i++) {
int data;
scanf("%d", &data);
addNode(head, data);
}
printf("原二进制数为:");
printList(head);
addOne(head);
printf("加1后的二进制数为:");
printList(head);
return 0;
}
```
对于输入的二进制数,我们可以使用链表来存储,每个结点的data域存放一个二进制位。在链表上实现对二进制数加1的运算时,我们可以从链表的末尾开始遍历,如果当前结点的data域为0,则将其改为1并结束遍历;如果当前结点的data域为1,则将其改为0并继续遍历下一个结点,直到遍历完整个链表。如果遍历完链表后仍然没有结束,则说明需要在链表的末尾添加一个新的结点,其data域为1。