第四周项目一 建立单链表

cpp]  view plain  copy
  1. /*      
  2.  * Copyright (c) 2017,烟台大学计算机学院      
  3.  * All right reserved.      
  4.  * 文件名称:main.cpp     
  5.  * 作者:姬长水      
  6.  * 完成日期:2017年9月21日      
  7.  * 版本号:v1.0      
  8.  *      
  9.  * 问题描述:建立单链表    
  10.  * 输入描述:标准函数输入      
  11.  * 程序输出:标准函数输出   
  12. */     
  13.   
  14. 定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。  
  15. 代码如下:  
  16.   
  17.   
  18.   
  19.    
  20. #include <stdio.h>    
  21. #include <malloc.h>    
  22. typedef int ElemType;    
  23. typedef struct LNode        //定义单链表结点类型    
  24. {    
  25.     ElemType data;    
  26.     struct LNode *next;     //指向后继结点    
  27. } LinkList;    
  28.     
  29. void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表    
  30. void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表    
  31. void DestroyList(LinkList *&L); //销毁单链表    
  32. void DispList(LinkList *L);  //输出单链表    
  33.     
  34. int main()    
  35. {    
  36.     LinkList *L1, *L2;    
  37.     ElemType a[8]= {7, 9, 8, 2, 0, 4, 6, 3};    
  38.     CreateListF(L1, a, 8);    
  39.     printf("头插法建表结果:");    
  40.     DispList(L1);    
  41.     CreateListR(L2, a, 6);    
  42.     printf("尾插法建表结果:");    
  43.     DispList(L2);    
  44.     DestroyList(L1);    
  45.     DestroyList(L2);    
  46.     return 0;    
  47. }    
  48. //在下面写自定义函数(实现相关算法)的代码    
  49. void CreateListF(LinkList *&L,ElemType a[],int n)    
  50. {    
  51.     LinkList *s;    
  52.     int i;    
  53.     L=(LinkList*)malloc(sizeof(LinkList));    
  54.     L->next=NULL;    
  55.     for(i=0;i<n;i++)    
  56.     {    
  57.         s=(LinkList *)malloc(sizeof(LinkList));    
  58.         s->data=a[i];    
  59.         s->next=L->next;    
  60.         L->next=s;    
  61.     }    
  62. }    
  63.     
  64. void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表    
  65. {    
  66.     LinkList *s,*r;    
  67.     int i;    
  68.     L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点    
  69.     L->next=NULL;    
  70.     r=L;                    //r始终指向终端结点,开始时指向头结点    
  71.     for (i=0; i<n; i++)    
  72.     {    
  73.         s=(LinkList *)malloc(sizeof(LinkList));//创建新结点    
  74.         s->data=a[i];    
  75.         r->next=s;          //将*s插入*r之后    
  76.         r=s;    
  77.     }    
  78.     r->next=NULL;           //终端结点next域置为NULL    
  79. }    
  80.     
  81. void DestroyList(LinkList *&L)  //销毁单链表    
  82. {    
  83.     LinkList *p=L,*q=p->next;    
  84.     while (q!=NULL)    
  85.     {    
  86.         free(p);    
  87.         p=q;    
  88.         q=p->next;    
  89.     }    
  90.     free(p);    //此时q为NULL,p指向尾结点,释放它    
  91. }    
  92.     
  93. void DispList(LinkList *L)  //输出单链表    
  94. {    
  95.     LinkList *p=L->next;    
  96.     while (p!=NULL)    
  97.     {    
  98.         printf("%d ",p->data);    
  99.         p=p->next;    
  100.     }    
  101.     printf("\n");    
  102. }  <img src="https://img-blog.csdn.net/20171014102153336" alt="">  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值