• 数据结构学习1:链表的相关操作


    step1:节点的描述

    C语言中用带指针的结构体类型来描述:

    typedef  struct  Lnode

    {   ElemType  data;     /*数据域,保存结点的值 */

    struct   Lnode  *next;      /*指针域*/

    }LNode;        /*结点的类型 */

    step2:节点的实现

    动态分配   p=(LNode*)malloc(sizeof(LNode));

    函数malloc分配了一个类型为LNode的结点变量的空间,并将其首地址放入指针变量p中。

    动态释放  free(p) ;

    系统回收由指针变量p所指向的内存区。P必须是最近一次调用malloc函数时的返回值。

    step3:基本操作

    ⑴ 结点的赋值

    LNode  *p;

    p=(LNode*)malloc(sizeof(LNode));

    p->data=20;  p->next=NULL ;

    (2)增加一个元素

    插入运算是将值为e的新结点插入到表的第i个结点的位置上,即插入到ai-1与ai之间。因此,必须首先找到ai-1所在的结点p,然后生成一个数据域为e的新结点q,q结点作为p的直接后继结点。

    void  Insert_LNode(LNode *L,int i,ElemType e)

        /*  在以L为头结点的单链表的第i个位置插入值为e的结点 */

    {   int  j=0;  LNode *p,*q;

    p=L–>next ;

    while  ( p!=NULL&& j<i-1)

    {  p=p–>next;  j++;   }

    if  (j!=i-1)     printf(“i太大或i为0!!\n ”);

    else

    {  q=(LNode *)malloc(sizeof(LNode));

    q–>data=e;   q–>next=p–>next; //注意勾链顺序

    p–>next=q;

    }

    }

    (3)删除一个元素

    按序号删除:

    void  Delete_LinkList(LNode *L, int i)

      /*  删除以L为头结点的单链表中的第i个结点  */

    {  int  j=1;  LNode *p,*q;

    p=L;  q=L->next;

    while  ( p->next!=NULL&& j<i)

    {  p=q;  q=q–>next;  j++;  }

    if  (j!=i)     printf(“i太大或i为0!!\n ”); 

    else   

    {  p–>next=q–>next;   free(q);    }

    }

    按值删除:

    void  Delete_LinkList(LNode *L,int key)

    /*  删除以L为头结点的单链表中值为key的第一个结点  */

    {     LNode *p=L,  *q=L–>next;

    while  ( q!=NULL&& q–>data!=key)    

    {  p=q;  q=q–>next;   }

    if  (q–>data==key)  

    {  p->next=q->next;  free(q);   }

    else 

    printf(“所要删除的结点不存在!!\n”);

    }

  • 相关阅读:
    【常见问题汇总--持续更新】bootloader常见问题
    UCD9222 EN1/EN2
    cdce62005配置说明
    xilinx planahead partial reconfiguration
    诺基亚 920T
    不出现用户帐户控制-让Win7的用户账户控制(UAC)放过信任的程序
    python 拷贝文件夹下的文件 到 另一个文件夹
    python 计算两个日期间的小时数
    shell 解析 json
    shell 脚本运行 hive sql
  • 原文地址:https://www.cnblogs.com/zhaoxiaolei/p/2432678.html
Copyright © 2020-2023  润新知