用c++单链表的方式实现删除成绩不合格的同学成绩
时间: 2023-05-31 13:02:35 浏览: 57
以下是用c单链表的方式实现删除成绩不合格的同学成绩的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int score;
struct node *next;
} Node;
Node *create_list(int scores[], int n) {
Node *head = NULL, *tail = NULL;
for (int i = 0; i < n; i++) {
Node *node = (Node *)malloc(sizeof(Node));
node->score = scores[i];
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
void print_list(Node *head) {
Node *p = head;
while (p != NULL) {
printf("%d ", p->score);
p = p->next;
}
printf("\n");
}
Node *delete_failed_students(Node *head) {
Node *prev = NULL, *curr = head;
while (curr != NULL) {
if (curr->score < 60) {
if (prev == NULL) {
head = curr->next;
} else {
prev->next = curr->next;
}
Node *temp = curr;
curr = curr->next;
free(temp);
} else {
prev = curr;
curr = curr->next;
}
}
return head;
}
int main() {
int scores[] = {80, 50, 70, 30, 90, 65};
int n = sizeof(scores) / sizeof(int);
Node *head = create_list(scores, n);
printf("Original list: ");
print_list(head);
head = delete_failed_students(head);
printf("List after deleting failed students: ");
print_list(head);
return 0;
}
```
在这个示例代码中,我们首先定义了一个结构体 `Node`,其中包含一个成绩 `score` 和一个指向下一个节点的指针 `next`。然后,我们实现了创建链表、打印链表和删除不合格同学的函数。在删除函数中,我们使用了两个指针 `prev` 和 `curr` 来遍历链表,如果当前节点的成绩不合格(小于60),就删除该节点,并将指针调整到下一个节点;否则,就将指针往后移动。最后,我们在主函数中创建一个包含一些成绩的链表,打印原始链表,然后调用删除函数删除不合格同学的成绩,再打印删除后的链表。