写程序建立一个链表,每个结点包括:学号、姓名、性别、年龄,输入一个学号,如果链表中的结点包括该学号,则输出该结点内容后,并将其结点删去。
时间: 2024-05-05 13:19:38 浏览: 81
链表的建立与结点的删除
好的,你的问题是关于如何写程序建立一个包含学号、姓名、性别和年龄的链表,并且如何在链表中查找给定学号的结点,如果找到则输出该结点内容以及删除该结点的方法,是吗?
首先,我们需要定义一个结点的数据结构,其中包括学号、姓名、性别和年龄等信息。代码如下:
```
struct ListNode {
int number; // 学号
char name[20]; // 姓名
char gender; // 性别,M表示男性,F表示女性
int age; // 年龄
struct ListNode* next; // 指向下一个结点的指针
};
```
然后,我们可以编写一个函数来创建链表,并在其中添加结点。具体代码如下:
```
struct ListNode* createList() {
struct ListNode* head = NULL; // 链表头结点
struct ListNode* tail = NULL; // 链表尾结点
// 这里简单起见,假设我们已经有了一些结点的数据,可以直接用数组表示
int numbers[] = {1001, 1002, 1003};
char* names[] = {"Alice", "Bob", "Charlie"};
char genders[] = {'F', 'M', 'M'};
int ages[] = {20, 21, 22};
// 依次将数组中的数据添加到链表中
for (int i = 0; i < 3; i++) {
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->number = numbers[i];
strcpy(node->name, names[i]);
node->gender = genders[i];
node->age = ages[i];
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
```
接下来,我们可以编写一个函数来查找给定学号的结点,并输出该结点的内容。如果找到了该结点,我们可以用一个指针指向该结点,并将其从链表中删除。具体代码如下:
```
void deleteNode(struct ListNode** head, int number) {
struct ListNode* curNode = *head;
struct ListNode* prevNode = NULL;
// 找到给定学号的结点
while (curNode != NULL && curNode->number != number) {
prevNode = curNode;
curNode = curNode->next;
}
// 如果找到了该结点,则输出其内容并将其删除
if (curNode != NULL) {
printf("%d %s %c %d\n", curNode->number, curNode->name, curNode->gender, curNode->age);
if (prevNode == NULL) {
*head = curNode->next;
} else {
prevNode->next = curNode->next;
}
free(curNode);
}
}
```
最后,我们可以在主函数中调用以上两个函数来完成链表的创建和结点的删除。代码如下:
```
int main() {
struct ListNode* head = createList();
int number;
printf("请输入要删除的学生的学号:");
scanf("%d", &number);
deleteNode(&head, number);
return 0;
}
```
以上就是一个简单的链表操作程序的实现方法。希望对你有所帮助。
阅读全文