一起来学单链表吧!
文章目录
前言
本文主要讲述如何用C语言创建一个有头节点的单链表并打印输出。
一、代码
//c语言实现有头节点的链表
#include "stdio.h"
#include "malloc.h"
struct student {
//定义了一个结构体,包含两个域
int data;//数据域,用来存放数据
struct student *next;//指针域,用来存放地址
};
struct student *createList();
void printList (struct student *head);//函数申明
main(){
struct student *head;
head=createList();
printList(head);//函数调用
}
struct student *createList(){
struct student *head;
struct student *q;
struct student *p;
int data;
head=(struct student *)malloc(sizeof(struct student ));
//创建了一个头节点,与无头结点的链表相比,浪费了一个空间,节约了时间
head->next=NULL;
q=head;
/*
q=head;
q->next=NULL;
//这种方法也可以,先让q指向头节点,再让q->next为空
*/
scanf("%d",&data);
while(data!=0)
{
p=(struct student *)malloc(sizeof(struct student));
//动态分配存储空间
p->data=data;
//给p->data的房子里放data的值,值传递
q->next=p;//连接节点
q=q->next;//q指向当前链表的最后一个节点
scanf("%d",&data);
}
q->next=NULL;
return head;
}
void printList(struct student *head){
struct student *phead;
phead=head->next;
while(phead!=NULL){
printf("%4d",phead->data);
phead=phead->next;
}
printf("\n");
}
二、运行结果
1 3 5 0
1 3 5
--------------------------------
Process exited after 4.448 seconds with return value 10
请按任意键继续. . .
三.小知识
1.malloc是动态分配存储空间,程序运行结束后,malloc出的部分不消失。
2.与无头节点的单链表相比,有头节点的链表虽然浪费了一个空间,但它节约了时间,不用每次都判断q和head是否为空。