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

来源:互联网 发布:nginx配置多个站点 编辑:程序博客网 时间:2024/06/06 06:33
[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /* 
  2.  * Copyright (c) 2016, 烟台大学计算机与控制工程学院 
  3.  * All rights reserved. 
  4.  * 文件名称:Cube007.cpp 
  5.  * 作    者:杨俊杰
  6.  * 完成日期:2016年9月22日 
  7.  * 
  8.  * 问题描述:定义单链表存储结构,用头插法和尾插法建立单链表 
  9.  * 输入描述:无 
  10.  * 输出描述:建表结果 
  11.  */  
  12. #include <stdio.h>  
  13. #include <malloc.h>  
  14. typedef int ElemType;  
  15. typedef struct LNode        //定义单链表结点类型  
  16. {  
  17.     ElemType data;  
  18.     struct LNode *next;     //指向后继结点  
  19. } LinkList;  
  20.   
  21. void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表  
  22. void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表  
  23. void DestroyList(LinkList *&L);                   //销毁单链表  
  24. void DispList(LinkList *L);                       //输出单链表  
  25.   
  26. int main()  
  27. {  
  28.     LinkList *L1, *L2;  
  29.     ElemType a[8]= {7, 9, 8, 2, 0, 4, 6, 3};  
  30.     CreateListF(L1, a, 8);  
  31.     printf("头插法建表结果:");  
  32.     DispList(L1);  
  33.     CreateListR(L2, a, 6);  
  34.     printf("尾插法建表结果:");  
  35.     DispList(L2);  
  36.     DestroyList(L1);  
  37.     DestroyList(L2);  
  38.     return 0;  
  39. }  
  40. //在下面写自定义函数(实现相关算法)的代码  
  41. void CreateListF(LinkList *&L,ElemType a[],int n)//头插法建立单链表  
  42. {  
  43.     LinkList *s;  
  44.     int i;  
  45.     L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点  
  46.     L->next=NULL;  
  47.     for (i=0; i<n; i++)  
  48.     {  
  49.         s=(LinkList *)malloc(sizeof(LinkList));//创建新结点  
  50.         s->data=a[i];  
  51.         s->next=L->next;            //将*s插在原开始结点之前,头结点之后  
  52.         L->next=s;  
  53.     }  
  54. }  
  55. void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表  
  56. {  
  57.     LinkList *s,*r;  
  58.     int i;  
  59.     L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点  
  60.     L->next=NULL;  
  61.     r=L;                    //r始终指向终端结点,开始时指向头结点  
  62.     for (i=0; i<n; i++)  
  63.     {  
  64.         s=(LinkList *)malloc(sizeof(LinkList));//创建新结点  
  65.         s->data=a[i];  
  66.         r->next=s;          //将*s插入*r之后  
  67.         r=s;  
  68.     }  
  69.     r->next=NULL;           //终端结点next域置为NULL  
  70. }  
  71.   
  72. void DestroyList(LinkList *&L)  //销毁单链表  
  73. {  
  74.     LinkList *p=L,*q=p->next;  
  75.     while (q!=NULL)  
  76.     {  
  77.         free(p);  
  78.         p=q;  
  79.         q=p->next;  
  80.     }  
  81.     free(p);    //此时q为NULL,p指向尾结点,释放它  
  82. }  
  83.   
  84. void DispList(LinkList *L)  //输出单链表  
  85. {  
  86.     LinkList *p=L->next;  
  87.     while (p!=NULL)  
  88.     {  
  89.         printf("%d ",p->data);  
  90.         p=p->next;  
  91.     }  
  92.     printf("\n");  
  93. }  

运行结果:


知识点总结:
定义链表存储结构,新建链表并输出销毁链表
学习心得:
自我感觉链表知识点有点难,反复研究才能真正明白知识点

0 0
原创粉丝点击