zoukankan      html  css  js  c++  java
  • 关于链表中指针的学习

       昨天晚上在学习数据结构关于链表的部分,理解链表没什么难度,但是当自己动手写程序的时候各种问题就出来了,感觉逻辑很正常但是总得不到正确的结果。

          首先自己对C语言指针理解的不是很深入,在定义链表节点的结构体时,定义了一个指针类型的变量指向结构体如代码所示:  
      
    1  typedef int status;
    2   typedef struct Node{
    3        status data;
    4        Node *next;
    5   }Node,*linklist;
      然后在main函数中定义一个指向结构体的指针变量如 linklist L;
      在main函数之外声明一个创建链表的函数
      
     1 void Create_list(linklist L1,int n){
     2        linklist p;
     3        L1 = (linklist)malloc(sizeof(Node));
     4        L1->next = NULL;
     5        for(i = 0;i < n; i++){
     6             p = (linklist)malloc(sizeof(Node));
     7             p->data = i;
     8             p->next = L1->next;
     9             L1->next= p;
    10        }      
    11   }
         Create_list函数采用的事头插法添加链表节点,经过main 函数的调用生成一个链表。但是问题来了当我在使用打印链表的函数进行打印时,链表L是没有值的。我一直想不通,因为上述函数的逻辑是没有错的。为什么会出这样的问题呢。我开始从Main函数进行分析,首先定义linklist L ;然后调用Create_list函数,把指针L传给Create_list中的形参L1(指针类型),指针L和指针L1这两个变量指向同一个地址,但实质上还是两个指针变量,他们在内存中有自己的位置。当执行  L1 = (linklist)malloc(sizeof(Node));这条语句时L1将指向一个新节点的地址,这时L1和L中的保存的地址就已经不同了,接下来的操作都与指针L没有任何关系了,这就是问题的所在。如何解决这个问题呢??
         我们需要将指针L的地址(不是L指向的地址)传过去,这样Create_list函数中形参L1中保存的就是指针L的地址即指向指针的指针。之后用(*L1)的结果就是指向指针L指向的地址,相当于加了一层保护。代码如下:
      
     1 void Create_list(linklist *L1,int n){
     2        linklist p;
     3        (*L1) = (linklist)malloc(sizeof(Node));
     4        (*L1)->next = NULL;
     5      
     6        for(i = 0;i < n; i++){
     7             p = (linklist)malloc(sizeof(Node));
     8             p->data = i;
     9             p->next = (*L1)->next;
    10             (*L1)->next= p;
    11        }      
    12   }
    13   Main函数如下:
    14   int main(){
    15        linklist L;
    16        Create_list(&L,5);
    17        return 0;
    18   }
  • 相关阅读:
    应用js改变问章字体大小
    在北京实习的日子
    php算法
    SQL Server 查询处理中的各个阶段(SQL执行顺序)
    130 个你需要了解的 vim 命令
    分享一个检测用户是否用手机(Mobile)访问网站的 PHP 类
    使用apache自带日志分割模块rotatelogs,分割日志
    centos下lvs配置
    分享codeigniter框架,在zend studio 环境下的代码提示
    vi 常用命令
  • 原文地址:https://www.cnblogs.com/tianshuowang/p/4644725.html
Copyright © 2011-2022 走看看