#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語言鏈表 頭指針
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.