86 lines
1.7 KiB
C
86 lines
1.7 KiB
C
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
// 定义学生信息的数据结构,链表的节点
|
||
|
typedef struct stu_s
|
||
|
{
|
||
|
char sid;
|
||
|
char name[32];
|
||
|
int age;
|
||
|
|
||
|
struct stu_s *next;
|
||
|
} STU;
|
||
|
|
||
|
void shows(STU *head)
|
||
|
{
|
||
|
STU *pi = head;
|
||
|
printf("学号\t姓名\t年龄\n");
|
||
|
|
||
|
while (NULL != pi)
|
||
|
{
|
||
|
printf("%d\t%s\t%d\n", pi->sid, pi->name, pi->age);
|
||
|
pi = pi->next;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
STU *find_stu(STU *head, char sid)
|
||
|
{
|
||
|
if (NULL == head)
|
||
|
{
|
||
|
printf("链表为空,无法查找\n");
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
if (head->sid == sid)
|
||
|
{
|
||
|
return head;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
STU *pi = head;
|
||
|
while (NULL != pi->next && pi->next->sid != sid)
|
||
|
{
|
||
|
pi = pi->next;
|
||
|
}
|
||
|
|
||
|
// 如果没有找到删除的节点
|
||
|
if (NULL == pi->next)
|
||
|
{
|
||
|
printf("没有找到要查找的节点\n");
|
||
|
return NULL;
|
||
|
}
|
||
|
// 找到了要删除的节点
|
||
|
STU *pn = pi->next; // 要删除的节点
|
||
|
return pn;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
// 静态生成学生信息的链表
|
||
|
STU s1 = {1, "张三", 18, NULL}; // 头节点: 参数说明: 学号, 姓名, 年龄, 下一个节点的地址
|
||
|
STU s2 = {2, "李四", 19, NULL};
|
||
|
STU s3 = {3, "王五", 20, NULL};
|
||
|
|
||
|
STU *head = &s1; // 头节点
|
||
|
s1.next = &s2; // 头节点指向第二个节点
|
||
|
s2.next = &s3; // 第二个节点指向第三个节点
|
||
|
s3.next = NULL; // 第三个节点指向空
|
||
|
|
||
|
shows(head);
|
||
|
|
||
|
STU *item = find_stu(head, 2);
|
||
|
if (NULL != item)
|
||
|
{
|
||
|
printf("找到了\n");
|
||
|
printf("%d\t%s\t%d\n", item->sid, item->name, item->age);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
printf("没有找到\n");
|
||
|
}
|
||
|
|
||
|
// shows(head);
|
||
|
|
||
|
return 0;
|
||
|
}
|