• 图纸下载
  • 专业文献
  • 行业资料
  • 教育专区
  • 应用文书
  • 生活休闲
  • 杂文文章
  • 范文大全
  • 作文大全
  • 达达文库
  • 文档下载
  • 音乐视听
  • 创业致富
  • 体裁范文
  • 当前位置: 达达文档网 > 图纸下载 > 正文

    C语言中指针链表的学习探讨

    时间:2020-10-30 14:53:15 来源:达达文档网 本文已影响 达达文档网手机站

    摘 要:指针链表是一种最简单也是最常用的动态数据结构,它是对动态获得的内存进行组织的一种结构。本文通过教学实践,通过图示法从基本概念的理解入手,并深入讲解动态链表的建立,插入和删除,在教学过程中起到了良好的效果。

    关键词:动态;
    链表

    中图分类号:TP311.12

    C语言中存储数据的结构用的最普遍的是数组,包括简单类型的数组,指针数据和结构体数组等,但是他们在实际应用中,会因为实现定义过大的数组容量而造成内存的浪费,或者因为保守的预测分配而满足不了实际使用的要求,这时就需要另一种方法来解决这个问题,这就是动态数据结构和动态分配内存技术。链表就是这样一种最简单的动态数据结构。那么如何让学生能够很好的学习并掌握它,本人就近几年的教学过程中经过探讨,采用了图示法进行教学,效果很好。

    1 基本概念的理解

    1.1 指针的理解

    (1)指针与简单变量。通过图1所示理解指针与简单变量的关系,当把变量i的地址存入指针变量p1后,就可以说这个指针指向了该变量。

    如需要指向下一个元素,只需要指针往后移动即可!

    1.2 结构体的理解

    (1)结构体类型。结构体类型是一种专门组织和处理复杂关系的数据结构,是一种自定义类型。同一个数据对象由于应用不同定义的类型也有所不同。比如处理学生的信息,可以有很多种方式:

    结构体中的成员名可增,可减,形成新的结构体类型。

    (2)结构体变量与数组。以上是结构体类型的定义,变量定义方式有三种,这里不一一举例,可根据自己的个人习惯选择不同的定义方式。比如上面两个类型,分别定义简单变量,可这样定义:

    struct student s1,s2;

    struct stu s3,s4;

    如定义数组,结合前面所学数组的知识,可这样定义:

    struct student s[10];

    struct stu s1[20];

    2 指针链表

    掌握了前面指针和结构体的知识内容,对于指针链表的理解和掌握是非常重要的。

    2.1 指针链表的定义

    这里主要讲解单项链表结点的结构体类型的定义,对于初学者掌握了这种定义,对于以后学习更为复杂的链表知识的理解是很有帮助的。

    单项链表结点的定义:

    struct node

    {

    int data;

    //存放的数据,可以定义其他更为复杂的数据结构

    struct node *next;

    //指向struct node类型数据,用此建立链表

    };

    2.2 指针链表的建立

    定义好类型后,再定义变量,并将链表建立起来,形成整数数据按升序建立的数据链,下面通过函数create来实现链表的建立。

    struct node *create()

    {

    struct node *head,*p,*q,num;

    head=NULL;

    scanf("%d",#);

    while(num!=0)

    {

    p=(struct node *)malloc(sizeof(struct node ));

    if(p==NULL)

    {

    printf("Allocation failure\n");

    exit(0);

    }

    p->data=num;

    p->next=NULL;

    if(head==NULL)

    head=p;

    else

    q->next=p;

    q=p;

    }

    return head;

    }

    2.3 指针链表的插入

    链表建立完成后,最常用的操作之一就是对链表的数据进行增加,也就是插入操作,具体程序通过insert函数实现。

    struct node*insert(struct node*head,sturct node*r,int*x)

    {

    struct nod *p,*q;

    if(head==NULL)

    {

    head=r;

    r->next=NULL;

    }

    else

    {

    p=head;

    while(*x>p->data&&p-;>next!=NULL)

    {

    q=p;

    p=p->next;

    }

    if(*xdata)

    {

    if(p==head)

    head=r;

    else

    q->next=r;

    p->next=p;

    }

    else

    if(p==NULL)

    {

    p->next=r;

    r->next=NULL;

    }

    return head;

    }

    2.4 指针链表的删除

    对于链表中数据的删除也是链表数据中操作的重点,具体实现过程通过函数deletenode实现。

    struct node*deletenode(struct node*head,int*x)

    {

    struct nod*p,*q;

    if(head==NULL)

    {

    printf("This is a empty list.");

    return head;

    }

    p=head;

    while(*x!=p->data&&p-;>next!=NULL)

    {

    q=p;

    p=p->next;

    }

    if(*x==p->data)

    {

    if(p==head)

    head=p->next;

    else

    q->next=p->next;

    free(p);

    }

    else

    printf("NOT FOUND");

    return head;

    }

    3总结

    单向结点链表的主要操作就是建立,插入和删除数据,而且是链表当中最简单的一种形式,只有理解和掌握单向结点链表的基本操作,才有可能处理更为复杂的数据对象,在课堂上通过以上三个函数的编写与引导,学生对于链表有了初步的认识,并起到了良好的效果。

    参考文献

    [1]杜友福.C语言程序设计[M].北京:科学出版社,2012.

    [2]龚民,朱秀兰.C语言程序设计教学探讨[J].电脑知识与技术,2009.

    作者简介:刘山根(1976.8-),男,籍贯:河南新乡,职务:广东省华侨职业技术学校教务科副科长。

    相关热词搜索: 指针 链表 探讨

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网