用c语言创建链表,做如下操作用头插法、尾插法创建一个结点数据元素类型为字符型的链表,并将数据元素进行输出创建升序排列、结点数据元素类型为整型的链表,并将数据元素进行输出
时间: 2024-09-26 21:11:07 浏览: 36
在C语言中,我们可以使用结构体表示链表节点,并通过指针连接它们。这里我将简述如何分别使用头插法和尾插法创建一个字符类型的链表,并展示如何创建并输出升序排列的整型链表。
首先,我们定义链表节点的结构:
```c
typedef struct {
char data;
struct Node* next;
} Node;
```
### 头插法创建字符链表
头插法就是在链表头部插入新节点:
```c
void insertAtHead(Node** head, char value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 创建链表并输出
Node* createCharList() {
Node* head = NULL;
// 插入节点...
insertAtHead(&head, 'A'); // 首先插入'A'
// ...更多字符
while (head != NULL) {
printf("%c -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
```
### 尾插法创建字符链表
尾插法则是在链表尾部插入新节点:
```c
void insertAtTail(Node** head, char value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
if (*head == NULL) {
*head = newNode;
} else {
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
// 同样用于输出链表
```
### 创建升序整型链表
对于整型链表,可以添加比较函数来保证升序排序:
```c
bool compareNodes(Node* a, Node* b) {
return a->data < b->data;
}
void insertSorted(Node** head, int value) {
if (*head == NULL || compareNodes(*head, &value)) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = *head;
*head = newNode;
} else {
Node* current = *head;
while (compareNodes(current->next, &value)) {
current = current->next;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = current->next;
current->next = newNode;
}
}
// 输出升序链表
void printIntList(Node* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
```
阅读全文