当前位置:   article > 正文

c 理解链表

c 理解链表

 

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. struct film{
  5. char name[40];
  6. int id;
  7. struct film *next;
  8. };
  9. int main(void){
  10. struct film *head=NULL;
  11. struct film *ls,*work;
  12. char input[40];
  13. int i=0;
  14. while(i<3){ //设定3个struct film
  15. puts("输入名字");
  16. fgets(input,40,stdin);
  17. work=(struct film*)malloc(sizeof(struct film)); //每个struct film 的指针
  18. if(head==NULL)
  19. head=work; //存储第一个非空地址,用与以后程序的从头查询操作
  20. else{
  21. ls->next=work; //存储下一个struct film 指针,因为上次生成为NULL
  22. }
  23. work->next=NULL; //每次生成指针时,next都是NULL,下一次生成指针时再为上一次指针赋值
  24. strcpy(work->name,input); //赋值
  25. work->id=i;
  26. i++;
  27. ls=work; //当head=null时,ls为第一个非null struct film
  28. }
  29. work=head; //指向第一个非NULL film指针
  30. while(work!=NULL){
  31. printf("name:%s id:%d\n",work->name,work->id); //显示全部film
  32. work=work->next; //指向下一个film指针
  33. }
  34. work=head;
  35. while(work!=NULL){
  36. free(work); //释放全部malloc
  37. work=work->next; //指向下一个film指针
  38. }
  39. return 0;
  40. }

程序在生成第一个struct flim时,它的next指针为NULL,它的值是在第二个flim生成时才为第一个next赋值的。这里用了两个struct flim指针变量ls  work 来转换实现。ls可以理解为暂存前一个指针,work理解为后一个指针。

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/528504
推荐阅读
相关标签
  

闽ICP备14008679号