#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
//头指针链表
//移除一个节点的思路:先查找到所要删除的节点,返回这个节点的地址。
// 然后在查找返回的地址,这时候被查找的地址是P节点,依次从head往后遍历的节点是pre;
typedef struct Student
{
int data;
struct Student *next;//定义了一个指针,指向一个Student结构体(指向新的节点)
}Student;
Student *head = NULL; //定义一个指针,指向Student类型的数据
//创建节点
Student *CreatNode(int value) //这里是要返回一个先建立的指针
{
Student *student = NULL;
student = (Student *)malloc(sizeof(Student)); //malloc申请空间返回的是void *类型,可以强制转换为其他类型。
student->data = value;
student->next = NULL;
return student;
}
//插入一个节点
void insert(Student *student)
{
student->next = head;
head = student;
}
//查找一个节点
Student *find(int value)
{
Student *student;
student = head;
while(student != NULL)
{
if(student->data == value)
{
printf("find it\n");
return student;
}
student = student->next;
}
}
//删除一个节点
int removed(Student *student)
{
Student *pre;
pre = head;
if(head == student)
{
head = student->next;
return 0;
}
while(pre->next != NULL)
{
if(pre->next == student)
{
pre->next = student->next;
printf("删除完毕\n");
break;
}
pre = pre->next;
}
return 0;
}
//遍历
void traverse()
{
Student *student; //定义一个Student类型的指针,指针变量是student,他存的是一个指向Student类型数据的地址。
student = head;
while(student != NULL)
{
printf("%d\n",student->data);
student = student->next;
}
}
//释放空间
void free_student()
{
Student *student;
student = head;
while(student != NULL)
{
free(student);
student=student->next;
}
}
int main()
{
Student *student = CreatNode(5);
insert(student);
student = CreatNode(40);
insert(student);
student = CreatNode(30);
insert(student);
// Student *p=find(30);
// removed(p);
traverse();
free_student();
}
c语言链表 头指针
最新推荐文章于 2024-08-18 22:08:24 发布