// 定义节点结构体 typedef struct node { char data; struct node* next; } Node; // 定义集合结构体 typedef struct set { Node* head; int size; } Set; // 创建节点 Node* create_node(char data) { Node* new_node = (Node*)malloc(sizeof(Node)); new_node->data = data; new_node->next = NULL; return new_node; } // 初始化集合 void init(Set* set) { set->head = NULL; set->size = 0; } // 插入元素 void insert(Set* set, char data) { Node* new_node = create_node(data); if (set->head == NULL) { set->head = new_node; } else { Node* p = set->head; while (p->next != NULL) { p = p->next; } p->next = new_node; } set->size++; } // 删除元素 void remove_node(Set* set, char data) { Node* p = set->head; Node* q = NULL; while (p != NULL && p->data != data) { q = p; p = p->next; } if (p != NULL) { if (q == NULL) { set->head = p->next; } else { q->next = p->next; } free(p); set->size--; } } // 显示集合 void display(Set set) { printf("{ "); Node* p = set.head; while (p != NULL) { printf("%c ", p->data); p = p->next; } printf("}\n"); }
时间: 2024-03-11 09:44:28 浏览: 23
这段代码是一个简单的集合(Set)的实现,其中集合的元素是字符(char)。代码中使用了链表(LinkedList)来存储集合中的元素,每个节点(Node)包括一个字符数据和一个指向下一个节点的指针。集合结构体(Set)包括一个头指针(head)和一个记录集合大小的整数(size)。代码中实现了初始化集合、插入元素、删除元素和显示集合等基本操作。其中插入元素操作会在集合的末尾添加一个新节点,删除元素操作会查找指定元素并将其从链表中删除。显示集合操作会遍历整个链表并输出集合中的所有元素。
相关问题
c语言合并有序单链表(新增结点)//单链表结点结构体 typedef struct node{ datatype data; struct node* next;}ListNode,*LinkList;
可以按照以下步骤合并两个有序单链表:
1. 定义一个指向新链表的指针 new_head,并将其初始化为 NULL。
2. 遍历两个有序单链表,比较每个链表中当前结点的值,将较小的值插入到新链表的尾部。
3. 如果其中一个链表已经遍历完了,将另一个链表的剩余部分直接插入到新链表尾部。
4. 返回新链表的头结点 new_head。
以下是 C 语言的代码实现:
```
LinkList merge(LinkList L1, LinkList L2) {
ListNode *p1 = L1, *p2 = L2, *new_head = NULL, *tail = NULL;
while (p1 != NULL && p2 != NULL) {
ListNode *new_node = (ListNode*)malloc(sizeof(ListNode)); // 新建结点
if (p1->data <= p2->data) { // 比较结点值
new_node->data = p1->data;
p1 = p1->next;
} else {
new_node->data = p2->data;
p2 = p2->next;
}
new_node->next = NULL;
if (new_head == NULL) { // 插入新结点
new_head = tail = new_node;
} else {
tail->next = new_node;
tail = new_node;
}
}
if (p1 != NULL) {
if (new_head == NULL) {
new_head = p1;
} else {
tail->next = p1;
}
} else if (p2 != NULL) {
if (new_head == NULL) {
new_head = p2;
} else {
tail->next = p2;
}
}
return new_head;
}
```
注意,这里假设两个链表都是升序排列的。如果链表中含有重复元素,可以根据实际情况在比较结点值时进行适当的调整。
c语言合并有序单链表(新增结点)//单链表结点结构体 typedef struct node{ datatype data; struct node* next;}L1和L2要在代码中输出
以下是一个合并两个有序单链表(L1 和 L2)并新增结点的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
//单链表结点结构体
typedef struct node {
int data;
struct node* next;
} Node;
//创建带头结点的单链表
Node* createList() {
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
return head;
}
//在单链表尾部插入结点
void appendNode(Node* head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
Node* p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
//合并有序单链表并新增结点
void mergeList(Node* L1, Node* L2, int data) {
Node* p1 = L1->next;
Node* p2 = L2->next;
Node* head = createList();
Node* tail = head;
while (p1 != NULL && p2 != NULL) {
if (p1->data < p2->data) {
tail->next = p1;
p1 = p1->next;
} else {
tail->next = p2;
p2 = p2->next;
}
tail = tail->next;
}
if (p1 == NULL) {
tail->next = p2;
} else {
tail->next = p1;
}
//在合并后的单链表尾部插入结点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
tail = head;
while (tail->next != NULL) {
tail = tail->next;
}
tail->next = newNode;
//输出合并后的单链表
printf("合并后的单链表:");
Node* p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
//释放内存
p = head;
while (p != NULL) {
Node* temp = p;
p = p->next;
free(temp);
}
}
int main() {
//创建 L1 单链表
Node* L1 = createList();
appendNode(L1, 1);
appendNode(L1, 3);
appendNode(L1, 5);
printf("L1 单链表:");
Node* p = L1->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
//创建 L2 单链表
Node* L2 = createList();
appendNode(L2, 2);
appendNode(L2, 4);
appendNode(L2, 6);
printf("L2 单链表:");
p = L2->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
//合并有序单链表并新增结点
mergeList(L1, L2, 7);
return 0;
}
```
输出结果:
```
L1 单链表:1 3 5
L2 单链表:2 4 6
合并后的单链表:1 2 3 4 5 6 7
```