创建链表分为前插入和后插入,这里是前插入方式创建:
#include<stdio.h>
#include<stdlib.h>
/*
链表构成:头指针,若干个节点(节点包括了数据域和指针域),最后一个节点要指向空。
实现原理:头指针指向链表的第一个节点,然后第一个节点中的指针指向下一个节点,然后依次指到最后一个节点,这样就构成了一条链表。
头节点、首节点。在首节点前设置一个节点称为头节点(不存放数据)
*/
typedef struct student //创建一个结构体(链表的数据结构、节点)
{
int num; //数据域:用于存储数据
struct student *next; //指针域:定义一个指针,访问节点数据,也可用于遍历,指向下一个节点
}Lstudent,*LPstudent;//struct student相当于Lstudent ,struct student*相当于LPstudent
void InitLink(LPstudent *phead)//二级指针
{
Lstudent *ptr;//相当于LPstudent ptr;
*phead=NULL; //二级指针指向空(头指针指向空)
int n;
printf("please input number of student:\n");
scanf("%d",&n);
while(n>0)
{
ptr=malloc(sizeof(Lstudent)); //分配内存空间,申请节点空间
ptr->num=n; //给节点数据域赋值
ptr->next=*phead;//与头指针指向一致,第一个插入的指向null,第一个插入的节点放在末尾
*phead=ptr;//头指针改变指向
printf("please input number of student:\n");
scanf("%d",&n);
}
}
void printf_link(Lstudent *ptri)//创建一个打印函数
{
while(ptri!=NULL)
{
printf("%d ",ptri->num);
ptri=ptri->next;
}
}
int main()
{
LPstudent head;//创建头指针
InitLink(&head);//把头指针地址传给子函数,由子函数创建链表
printf_link(head);
}
~