多语言展示
当前在线:650今日阅读:60今日分享:41

C语言-初识链表

初学者,刚接触到C语言中的链表,理解的很浅,记录下学习心得。欢迎指出不足之处。先建立一个空链表,然后再将需要添加的新节点,逐个添加在头节点之后。
工具/原料

电脑

方法/步骤
1

创建指向头节点的指针,空链表以学生结构体为例struct student{int num;char name[20]struct student *next;  };typedef struct student STU; /*-- 将 struct student 取个别名为 STU */用malloc()函数 在物理内存中开辟一个空间,存放头节点;并定义一个 指向头节点的指针变量:STU* head=(STU*)malloc(sizeof(STU)); 进行防错处理 if(head==NULL) {printf('Error-01');exti(0);}将头节点的指针域为空,表示空链表 head->next=NULL;注意,此时头节点只是创建完毕,但并没有与第一个节点连接起来。

3

(3 ) 程序写到这里,整个链表中,实际只存在一个节点,即是头节点,又是尾节点。因此尾节点最开始也是指向头节点。tail=head;那么新节点最开始,是指向哪里?

方法/步骤2
1

为新节点申请内存空间在什么条件下才开始申请内存?比如,有链表长度个数之内,链表输入有效数据,未到达文件结尾等条件。本例是输入的数据为正的条件下。int new_num; while(1)    /* 循环添加新节点 */ { printf('please input new num: '); sacnf('%d',&new_num);if(new_num>0){ pnew=(STU*)malloc(sizeof(STU)); /*并需要防错*/pnew->new_num;      /* 为新节点赋值*/printf('please input new name: ');scanf('%s',pnew->name);  /*为新节点赋值*/pnew->next=NULL;   /* 以下是尾插法的关键的三句话*/tail->next=pnew;      /*原链表尾节点指针域指向新节点*/tail=pnew;               /*更新尾节点位置*/}else break;}/*循环创建完毕,即一般节点创建完毕,此时创建了头节点,也创建了一般节点,还需要将头节点与一般节点关联起来*/

2

pnew=head;  /* 一句话:创建单向新链表,最开始时新节点,尾节点都指向头节点. .这么总结好像有点不恰当..*/head=head->next;  /*head指针指向一般节点的第一个元素,即首节点*/free(pnew);

3

若是调用函数的方式来写链表,最后还要返回头节点return head;

推荐信息