试编写算法,构造一个单链表(设头指针为head),将字符串s中的每一个字符依次存放到该单链表中去,单链表中每个结点存放4个字符。
时间: 2023-04-30 12:00:39 浏览: 253
3-2 试编写一个算法,在带表头结点的单链表中寻找第i个结点.doc
1. 定义单链表结构体Node,包含4个字符和指向下一个结点的指针next。
2. 定义头指针head,并初始化为NULL。
3. 从字符串s中取出每4个字符,构造一个Node结点,并将其插入到单链表中。
4. 如果字符串s的长度不是4的倍数,将剩余的字符构造成一个Node结点,并插入到单链表中。
5. 返回头指针head。
具体实现如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NODE_SIZE 4
typedef struct Node {
char data[NODE_SIZE];
struct Node *next;
} Node;
Node* createList(char *s) {
Node *head = NULL;
Node *tail = NULL;
int len = strlen(s);
int i;
for (i = 0; i < len; i += NODE_SIZE) {
Node *node = (Node*)malloc(sizeof(Node));
strncpy(node->data, s + i, NODE_SIZE);
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
if (len % NODE_SIZE != 0) {
Node *node = (Node*)malloc(sizeof(Node));
strncpy(node->data, s + i - len % NODE_SIZE, len % NODE_SIZE);
node->next = NULL;
tail->next = node;
}
return head;
}
int main() {
char s[] = "hello world";
Node *head = createList(s);
Node *p = head;
while (p != NULL) {
printf("%s ", p->data);
p = p->next;
}
return 0;
}
```
阅读全文