zoukankan      html  css  js  c++  java
  • c链表中指针的一些用法要点

    /* 结构体不能含有同类型的结构,但是可以含有指向同类型结构的指针。这样的定义是定义一个链表的基础。 */
    1
    typedef int Element; 2 3 typedef struct node{ 4 Element e; 5 struct node* next;//这里只是声明了一个名为next的指针,指针本身也占内存空间,里面存放的始终是地址。 struct node* 表示指针的类型是 struct node,即指向的地址里存放的是一个结构体 6 }LNode, *Linklist;  //LNode等价于struct node; *LinkList 等价于 struct node* 
    •  等号 = 左右 的 p 和 p->next 意义不同,要注意甄别;
    • pre 单独出现的时候代表一个节点 ,如head,就代表head节点;
    • pre在 = 左边 出现时代表一个节点在= 右边 出现时代表节点pre的地址;
      •   p = head; //节点p指向节点head的地址
    • p->next 在= 左边 出现时 节点p的指针域在 = 右边 出现时代表节点 p 的下一个节点地址(即下一节点数据域的地址);
      •   p->next = pre->next; //p 的指针域指向原先 pre 节点的下一个节点地址
      •   pre->next = p; //pre的指针域指向节点 p 的地址
    • 单链表中申请的节点 p 不能使用"p++"操作。p++本身不会出现语法问题,但是并不会"从指向p变成指向p的下一个节点" , 而是"从指向p的数据域地址变成指向p的指针域地址" 
     1 /**
     2 * 插入元素 
     3 */
     4 Linklist insert(Linklist head, int k, Element e){
     5     int getLength(Linklist head);
     6     
     7     Linklist p = (Linklist)malloc(sizeof(LNode));//申请一个新节点
     8     Linklist pre = (Linklist)malloc(sizeof(LNode));//申请一个新节点
     9     int length = getLength(head);
    10     pre = head;
    11 
    12     if(k == length+1){    //在链表末尾添加新节点 
    13         while(pre->next) {
    14             pre = pre->next; //单链表中申请的节点 p 不能使用"p++"操作。p++本身不会出现语法问题,但是并不会"从指向p变成指向p的下一个节点" , 而是"从指向p的数据域地址变成指向p的指针域地址" 
    15         }//循环结束时,pre已经到达链表末尾 
    16         p->e = e;
    17         pre->next = p;
    18         p->next = NULL;
    19     }else if(k > 0 && k <= length){//在链表中间添加节点 ,插入位置从1开始算 
    20         int j = 1;
    21         while(j < k) {
    22             pre = pre->next;//单链表中申请的节点 p 不能使用"p++"操作。p++本身不会出现语法问题,但是并不会"从指向p变成指向p的下一个节点" , 而是"从指向p的数据域地址变成指向p的指针域地址" 
    23             j++;
    24         }//循环结束时,pre是要插入位置的前驱节点
    25         p->e = e;
    26         p->next = pre->next; // p 的指针域指向原先 pre 节点的下一个节点的地址 
    27         pre->next = p;  // pre的指针域指向节点 p 的地址
    28     }else{
    29         printf("插入的位置有误!
    ");
    30     }
    31     return head;
    32 }
  • 相关阅读:
    23Flutter FloatingActionButton实现类似闲鱼App底部导航凸起按钮:
    Emgu.CV 播放视频-本地文件/RTSP流
    SDL 截图、录像、录像播放
    直接操作 SDL_Overlay YUV叠加上的像素
    SDL 显示解码后的yuv12数据
    SDL绑定播放窗口 及 视频窗口缩放
    SDL鼠标事件
    SDL文字和图形
    SDL第一个程序:加载一张图片
    SDL简介(网络汇总)
  • 原文地址:https://www.cnblogs.com/sunshine233/p/14467972.html
Copyright © 2011-2022 走看看