C语言使用链表实现学生籍贯管理系统攻略
本文将详细讲解如何使用C语言实现学生籍贯管理系统的链表数据结构,包括链表的定义、创建、插入、删除和遍历等基本操作。
一、链表的定义
链表是一种动态数据结构,由若干个节点通过指针链接而成。链表中的每个节点(除了最后一个节点)都有一个指向下一个节点的指针,最后一个节点的指针指向NULL。
在C语言中,链表的节点可以使用结构体来实现。例如,下面是一个定义学生籍贯的节点的结构体:
typedef struct student{
char name[20]; // 学生姓名
int age; // 学生年龄
char hometown[20]; // 学生籍贯
struct student *next; // 指向下一个节点的指针
}studentNode;
在这个结构体中,除了姓名、年龄和籍贯等数据之外,还有一个指向下一个节点的指针。
二、链表的创建和插入节点
创建链表,需要先定义链表的头节点,然后通过指针不断链接新的节点。例如,下面是一个创建链表并插入节点的函数:
studentNode *create_student_list(){
studentNode *head,*tail,*p_new;
head=tail=NULL;
char name[20],hometown[20];
int age;
printf("请输入学生信息(姓名 年龄 籍贯),以0 0 0结束:");
while(1){
scanf("%s%d%s",name,&age,hometown);
if (strcmp(name,"0")==0 && age==0 && strcmp(hometown,"0")==0) break;
p_new=(studentNode *)malloc(sizeof(studentNode));
strcpy(p_new->name,name);
p_new->age=age;
strcpy(p_new->hometown,hometown);
if (head==NULL){
head=p_new;
tail=p_new;
}else{
tail->next=p_new;
tail=p_new;
}
}
if (head==NULL) return NULL;
tail->next=NULL;
return head;
}
在这个函数中,首先定义了头节点、尾节点和新节点三个指针,然后通过输入参数和动态内存分配的方式,创建一个新的节点并将其插入链表中。
三、链表的遍历和删除节点
遍历链表,可以利用循环的方式通过指针不断向后遍历,直至节点指针为NULL。例如,下面是一个遍历链表并输出学生信息的函数:
void display_student_list(studentNode *list){
studentNode *p=list;
printf("学生信息如下:\n");
while (p){
printf("%s\t%d\t%s\n",p->name,p->age,p->hometown);
p=p->next;
}
}
在这个函数中,通过循环的方式遍历链表,逐一输出学生的姓名、年龄和籍贯等信息。
删除链表的节点,可以先找到要删除的节点,然后将其上一个节点的next指针指向其下一个节点即可。例如,下面是一个删除链表中指定学生信息的函数:
int delete_student_node(studentNode **list,char* name,int age,char* hometown){
studentNode *p=(*list),*q=NULL;
while (p){
if (strcmp(p->name,name)==0 && p->age==age && strcmp(p->hometown,hometown)==0){
if (p==(*list)){
*list=p->next;
}else{
q->next=p->next;
}
free(p);
return 1;
}
q=p;
p=p->next;
}
return 0;
}
在这个函数中,通过循环的方式遍历链表,查找要删除的学生信息。如果找到该学生,则将其从链表中删除,否则返回0。
四、示例说明
示例1:创建链表并输出学生信息
studentNode *list=create_student_list();
display_student_list(list);
在这个示例中,先通过create_student_list函数创建一个链表并插入若干个学生的信息,然后通过display_student_list函数遍历链表并输出学生信息。
示例2:删除链表中指定学生信息
delete_student_node(&list,"张三",20,"北京");
在这个示例中,首先定义一个链表list并插入若干个学生的信息,然后调用delete_student_node函数删除姓名为"张三"、年龄为20、籍贯为"北京"的学生信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言使用链表实现学生籍贯管理系统 - Python技术站