在链队列的实现的数据结构实验里,用C语言写“重新排队。在队列A中,有若干男生(可用奇数表示)和女生(可用偶数表示)。选出队列A中的女生放在队列B中,选出队列A中的男生放在队列C中。仍然保持原来的相对位置”的代码
时间: 2024-11-27 22:17:16 浏览: 8
在C语言中实现链队列并完成这个特定任务,你可以创建三个链表,分别代表男生队列、女生队列和新的队列。这里是一个基本的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct Node {
int value;
struct Node* next;
} Node;
// 初始化空链表
Node* createQueue() {
return (Node*)malloc(sizeof(Node));
}
// 插入元素到链表尾部
void enqueue(Node** head, int value) {
Node* newNode = createQueue();
newNode->value = value;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
} else {
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 删除并返回链表头部的元素
int dequeue(Node** head) {
if (*head == NULL) {
printf("Queue is empty.\n");
return -1; // 返回错误码
}
int value = (*head)->value;
Node* temp = *head;
*head = (*head)->next;
free(temp);
return value;
}
// 重新排队函数
void requeue(Node** queueA, Node** queueB, Node** queueC) {
Node* aHead = *queueA;
Node* bHead = *queueB;
Node* cHead = *queueC;
while (aHead != NULL) {
if (aHead->value % 2 == 0) { // 女生
enqueue(queueB, aHead->value);
} else { // 男生
enqueue(queueC, aHead->value);
}
aHead = aHead->next;
}
}
// 打印链表
void printQueue(Node* head) {
while (head != NULL) {
printf("%d -> ", head->value);
head = head->next;
}
printf("NULL\n");
}
int main() {
Node* queueA, *queueB, *queueC;
queueA = queueB = queueC = NULL;
// 假设你已经有了预先填充好男生和女生的队列A
// ... (在这里添加插入元素的操作)
requeue(&queueA, &queueB, &queueC);
printf("Queue A (Original):");
printQueue(queueA);
printf("Queue B (Girls):");
printQueue(queueB);
printf("Queue C (Boys):");
printQueue(queueC);
return 0;
}
```
阅读全文