(第四周项目1)建立单链表

来源:互联网 发布:淘宝代销产品图片搬家 编辑:程序博客网 时间:2024/04/28 13:01
/* *Copyright (c)2016,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:建立单链表.cbp *作    者:黄玉娇 *完成日期:2016年9月18日 *版 本 号:v1.0 * *问题描述:定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。 *输入描述:无 *程序输出:输出头插法尾插发链表 */    

代码:

#include <stdio.h>  #include <malloc.h>  typedef int ElemType;  typedef struct LNode        //定义单链表结点类型  {      ElemType data;      struct LNode *next;     //指向后继结点  } LinkList;    void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表  void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表  void DestroyList(LinkList *&L); //销毁单链表  void DispList(LinkList *L)  ;//输出单链表    //主函数  int main()  {      /*     LinkList *L1, *L2;     ElemType a[8]= {7, 9, 8, 2, 0, 4, 6, 3};     CreateListF(L1, a, 8);     printf("头插法建表结果:");     DispList(L1);     CreateListR(L2, a, 6);     printf("尾插法建表结果:");     DispList(L2);     DestroyList(L1);     DestroyList(L2);     */      LinkList *L1,*L2;      ElemType a[10]={0,1,5,7,6,8,9,3,12,10};      CreateListF(L1,a,10);      printf("头插法建表结果: ");      DispList(L1);      CreateListR(L2,a,10);      printf("尾插法建表结果: ");      DispList(L2);      DestroyList(L1);      DestroyList(L2);      return 0;  }    // 自定义函数实现  void CreateListF(LinkList *&L,ElemType a[],int n)//头插法建立单链表  {      LinkList *s;      int i;      L=(LinkList *)malloc(sizeof(LinkList));      L->next=NULL;//创建头结点,其next域置为NULL      for(i=0;i<n;i++)//循环建立数据节点      {          s=(LinkList *)malloc(sizeof(LinkList));          s->data=a[i];//创建数据节点*s          s->next=L->next;//将*s插在原开始节点之前,头节之后          L->next=s;      }  }  void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表  {    LinkList *s,*r;    int i;    L=(LinkList *)malloc(sizeof (LinkList));//创建头节点    r=L;//r始终指向尾节点,开始时指向头节点    for(i=0;i<n;i++)//循环建立数据节点    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=a[i];//创建数据节点*s        r->next=s;//将*s插入*r之后        r=s;//尾节点next域置为NULL    }    r->next=NULL;  }  void DestroyList(LinkList *&L) //销毁单链表  {      LinkList *pre=L,*p=L->next;//pre指向*p的前区节点      while(p!=NULL)//扫描单链表L      {          free(pre);//释放*pre节点          pre=p;//pre、p同时后移一个节点          p=pre->next;      }      free(pre);//循环结束时,p为NULL,pre指向尾节点,释放它  }  void DispList(LinkList *L) //输出单链表  {      LinkList *p=L->next;//p指向开始节点      while(p!=NULL)//p不为NULL,输出*p节点的data域      {          printf("%d ",p->data);          p=p->next;//p移向下一个节点      }      printf("\n");  }  

运行结果:


知识点总结:

  基础的链表建立

学习心得:

  参考老师给出的例程懂了,但是自己写还是有困难。

0 0
原创粉丝点击