第四周 项目1-建立单链表

本文介绍使用头插法和尾插法建立单链表的过程,并提供完整的C语言实现代码。通过实例演示两种方法建立链表的区别及输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. /*Copyright(c)2016,烟台大学计算机与控制工程学院 
  2.  *All right reserved. 
  3.  *文件名称:头插法和尾插法.cpp 
  4.  *作者:陈晓琳 
  5.  *完成日期;2016年9月23日 
  6.  *版本号;v1.0 
  7.  * 
  8.  *问题描述:  定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。 
  9.  
  10.  
  11.  *输入描述:无 
  12.  *程序输出:头插法后的数据排列和尾插法的数据排列 
  13. */  
  14.   
  15. #include <stdio.h>  
  16. #include <malloc.h>  
  17. typedef int ElemType;  
  18. typedef struct LNode        //定义单链表结点类型  
  19. {  
  20.     ElemType data;  
  21.     struct LNode *next;     //指向后继结点  
  22. } LinkList;  
  23.   
  24. void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表  
  25. void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表  
  26. void DestroyList(LinkList *&L); //销毁单链表  
  27. void DispList(LinkList *L);  //输出单链表  
  28.   
  29. int main()  
  30. {  
  31.     LinkList *L1, *L2;  
  32.     ElemType a[8]= {7, 9, 8, 2, 0, 4, 6, 3};  
  33.     CreateListF(L1, a, 8);  
  34.     printf("头插法建表结果:");  
  35.     DispList(L1);  
  36.     CreateListR(L2, a, 6);  
  37.     printf("尾插法建表结果:");  
  38.     DispList(L2);  
  39.     DestroyList(L1);  
  40.     DestroyList(L2);  
  41.     return 0;  
  42. }  
  43.   
  44. void CreateListF(LinkList *&L,ElemType a[],int n)  
  45. {  
  46.     LinkList *s;  
  47.     int i;  
  48.     L=(LinkList *)malloc(sizeof(LinkList));  
  49.     L->next=NULL;  
  50.     for (i=0; i<n; i++)  
  51.     {  
  52.         s=(LinkList *)malloc(sizeof(LinkList));  
  53.         s->data=a[i];  
  54.         s->next=L->next;  
  55.         L->next=s;  
  56.     }  
  57. }  
  58. void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表  
  59. {  
  60.     LinkList *s,*r;  
  61.     int i;  
  62.     L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点  
  63.     L->next=NULL;  
  64.     r=L;                    //r始终指向终端结点,开始时指向头结点  
  65.     for (i=0; i<n; i++)  
  66.     {  
  67.         s=(LinkList *)malloc(sizeof(LinkList));//创建新结点  
  68.         s->data=a[i];  
  69.         r->next=s;          //将*s插入*r之后  
  70.         r=s;  
  71.     }  
  72.     r->next=NULL;           //终端结点next域置为NULL  
  73. }  
  74.   
  75. void DestroyList(LinkList *&L)  //销毁单链表  
  76. {  
  77.     LinkList *p=L,*q=p->next;  
  78.     while (q!=NULL)  
  79.     {  
  80.         free(p);  
  81.         p=q;  
  82.         q=p->next;  
  83.     }  
  84.     free(p);    //此时q为NULL,p指向尾结点,释放它  
  85. }  
  86.   
  87. void DispList(LinkList *L)  //输出单链表  
  88. {  
  89.     LinkList *p=L->next;  
  90.     while (p!=NULL)  
  91.     {  
  92.         printf("%d ",p->data);  
  93.         p=p->next;  
  94.     }  
  95.     printf("\n");  
  96. }  
  97. 运行结果:
  98. 知识点总结:利用单链表存储结构,用头插法和尾插法建立单链表。
  99. 心得:要多把新知识和学过的知识联系起来,温故知新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值