用头插法建立一个长度为10的带头结点的单链表,值任意;然后遍历此单链表,将10个元素的值在屏幕上输出。(简化起见,假设数据元素类型为int类型) 实现按位查找,并输出结果。
时间: 2024-09-19 19:03:59 浏览: 44
首先,我们创建一个单链表节点结构体,包含一个整数值`data`和指向下一个节点的指针`next`:
```c++
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
```
接下来,我们编写函数用于创建长度为10的单链表并填充随机值:
```c
void createList(ListNode** head) {
*head = (ListNode*)malloc(sizeof(ListNode)); // 创建头结点
(*head)->data = 0; // 初始化头结点的数据
(*head)->next = NULL;
for(int i = 1; i < 10; ++i) { // 遍历9次,创建剩余节点
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = rand() % 100; // 生成0到99之间的随机数
newNode->next = (*head)->next;
(*head)->next = newNode;
}
}
```
然后,我们编写一个遍历链表并打印节点值的函数:
```c
void printList(ListNode* head) {
while(head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
```
对于按位查找功能,我们需要提供一个辅助函数,例如检查某个数字在链表中的二进制表示下某一位是否为1:
```c
int findBit(int target, int bitIndex, ListNode* head) {
int mask = 1 << bitIndex;
while(head != NULL) {
if((head->data & mask) == mask) {
return 1; // 如果该位置为1,则返回1
} else {
head = head->next;
}
}
return 0; // 如果遍历完链表都没有找到,返回0
}
// 示例:
int main() {
ListNode* head = NULL;
createList(&head);
printList(head);
int target = 42; // 要查找的目标数
for(int i = 0; i < sizeof(int)*8; ++i) {
if(findBit(target, i, head)) {
printf("第%d位为1\n", i+1); // 输出对应位的索引
} else {
printf("第%d位为0\n", i+1);
}
}
return 0;
}
```
阅读全文