c语言链表 头指针

    xiaoxiao2021-03-25  135

    #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(); }
    转载请注明原文地址: https://ju.6miu.com/read-12332.html

    最新回复(0)