用c语言写一个数据结构中舞伴搭配问题的代码实例
时间: 2024-02-20 11:58:07 浏览: 141
舞伴的配对代码
好的,舞伴搭配问题可以使用链表来实现,下面是一个简单的舞伴搭配问题的 C 语言代码:
```c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
// 舞者结构体
typedef struct dancer {
char name[20];
char sex;
struct dancer *next;
} Dancer;
// 初始化链表
void init_list(Dancer **head) {
*head = NULL;
}
// 添加舞者
void add_dancer(Dancer **head, char *name, char sex) {
Dancer *new_dancer = (Dancer *) malloc(sizeof(Dancer));
if (new_dancer == NULL) {
printf("内存分配失败!\n");
exit(1);
}
strcpy(new_dancer->name, name);
new_dancer->sex = sex;
new_dancer->next = NULL;
if (*head == NULL) {
*head = new_dancer;
} else {
Dancer *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_dancer;
}
}
// 查找舞伴
void find_partner(Dancer *head, char sex) {
Dancer *p = head;
while (p != NULL) {
if (p->sex != sex) {
printf("%s 和 %s 搭档!\n", head->name, p->name);
head->sex = 'X'; // 标记已找到搭档
p->sex = 'X';
return;
}
p = p->next;
}
printf("%s 没有找到搭档!\n", head->name);
}
// 舞伴搭配
void partner(Dancer *head) {
Dancer *p = head;
while (p != NULL) {
if (p->sex != 'X') {
find_partner(p, p->sex);
}
p = p->next;
}
}
// 主函数
int main() {
Dancer *head;
init_list(&head);
add_dancer(&head, "A", 'M');
add_dancer(&head, "B", 'F');
add_dancer(&head, "C", 'M');
add_dancer(&head, "D", 'F');
add_dancer(&head, "E", 'M');
add_dancer(&head, "F", 'F');
partner(head); // 舞伴搭配
return 0;
}
```
这个代码中,我们定义了一个舞者结构体,包含舞者的姓名、性别和下一个舞者的指针。然后,我们使用 `init_list()` 函数初始化链表,使用 `add_dancer()` 函数添加舞者,使用 `find_partner()` 函数查找舞伴,使用 `partner()` 函数来进行舞伴搭配。最后,在 `main()` 函数中,我们定义了一些舞者,然后调用 `partner()` 函数来进行舞伴搭配。
阅读全文