创建
首先链表这个数据结构的结构体由两个部分组成,分别是数据域和指针域,也就是存放数据的变量和指针
struct student{
char name[30]; //数据域
float number; //数据域
struct student *pNext; //指针域
};
链表的创建,就是在创建节点(malloc)和输入数据的同时让每个节点(结构体)都连接起来,连接的方式就是靠指针域中的指针,让每个结点的pNext都指向下一个节点,最后一个节点没节点可指的呀,那就让最后一个节点的指针(pNext)指向空(NULL)
这样,每个节点都连在了一起,就形成了一个长链,链表就创建好啦
struct student *create(){
struct student *pHead=NULL; //头节点,指向第一个结构体
struct student *pNew,*pEnd; //新节点和最后一个节点
pNew=pEnd=(struct student*)malloc(sizeof(struct student)); //给新节点和最后一个节点分配内存
printf("名字 学号:");
scanf("%s %f",&pNew->name,&pNew->number); //输入数据
/*判断当数据中的number等于0时停止分配新节点*/
while(pNew->number!=0){
len++; //长度(将会在后面完整代码中出现,这是个全局变量)
if(len==1){
pNew->pNext=NULL; //当长度等于1时让新节点的指针指向空(NULL)
pEnd=pNew;
pHead=pNew;
}
else{
pNew->pNext=NULL; //当长度大于1时新节点指针指向空
pEnd->pNext=pNew; //最后一个节点指向新节点
pEnd=pNew;
}
pNew=(struct student*)malloc(sizeof(struct student)); //分配新节点
scanf("%s %f",&pNew->name,&pNew->number);
}
free(pNew); //将多分配出的节点释放掉
return pHead; //返回链表的的头节点
}
或者还可以这样创建
struct student *create(){
struct student *pHead,*pNew,*p;
pNew=(struct student*)malloc(sizeof(struct student));
printf("输入名字 学号:\n");
scanf("%s %f",&pNew->name,&pNew->number);
pNew->pNext=NULL;
pHead=pNew;
p=pNew;
pNew=(struct student*)malloc(sizeof(struct student));
scanf("%s %f",&pNew->name,&pNew->number);
while(pNew->number!=0){
p->pNext=pNew;
p=p->pNext;
pNew=(struct student*)malloc(sizeof(struct student));
scanf("%s %f",&pNew->name,&pNew->number);
}
p->pNext=NULL;
free(pNew);
return pHead;
}
遍历
知道如何创建了,下一步就是遍历
遍历的话就