美文网首页
线性表的注意点(二)

线性表的注意点(二)

作者: YuWenHaiBo | 来源:发表于2016-10-14 10:39 被阅读22次

先看一个大家都熟悉的单链表结构体

typedef struct node{
      int data;
      struct  node * next;
} PNode,*LinkList;
// 简化后就是
struct node{ 
      int data; 
      struct node * next;
};
typedef struct node PNode;
typedef struct node *Linklist;

对于LinkList L: L是指向定义的node结构体的指针,可以用->运算符来访问结构体成员,即L->data,而(L)就是个node型的结构体了,可以用点运算符访问该结构体成员,即(L).data**;

对于LinkList L:L是指向定义的Node结构体指针的指针,所以(L)是指向Node结构体的指针,可以用->运算符来访问结构体成员,即(L)->data,当然,(**L) 就是node*型结构体了,所以可以用点运算符来访问结构体成员,即(**L).data;

在链表操作中,我们常常要用链表变量作物函数的参数,这时,用LinkList L还是LinkList L 就很值得考虑深究了,一个用不好,函数就会出现逻辑错误,其准则是:
如果函数会改变指针L的值,而你希望函数结束调用后保存L的值,那你就要用
LinkList L,这样,向函数传递的就是指针的地址,结束调用后,自然就可以去改变指针的值;
而如果函数只会修改指针所指向的内容,而不会更改指针的值,那么用LinkList L就行了;

下面说个具体实例吧!

#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Node{
 ElemType elem;
 struct Node * next;
}Node, * LinkList;

//初始化链表,函数调用完毕后,L会指向一个空的链表,即会改变指针的值,所以要用*L

void InitList(LinkList *L) {
       *L = (LinkList)malloc(sizeof(Node));
       (*L)->next = NULL;
}

//清空链表L,使L重新变为空链表,函数调用完后不会改变指针L的值,只会改变指针L所指向的内容(即L->next的值)

void ClearList(LinkList L){ LinkList p; while(p = L->next) free(p);}

//销毁链表L,释放链表L申请的内存,使L的值重新变为NULL,所以会改变L的值,得用*L

void DestroyList(LinkList *L)
{
 LinkList p;
 while(p = (*L)->next )
  free(p);
 free(*L);
 *L = NULL;
}

void main()
{
 LinkList L = NULL;
 InitList(&L);
 ClearList(L);
 DestroyList(&L);
}

对比数据结构上面的例子自己体会吧。

相关文章

  • 线性表的注意点(二)

    先看一个大家都熟悉的单链表结构体 对于LinkList L: L是指向定义的node结构体的指针,可以用->运算符...

  • 线性表的注意点(一)

    经常我们会遇到以下代码 这样可能看不懂让我们来慢慢简化。 再来 到这里想必大家都一目了然了,下面在说说个误区 对比...

  • 数据结构和算法之一——线性表_1_概念

    线性表相关概念1.1 定义:线性表( List ):由零个或多个数据元素组成的有限序列。1.2 注意:1)线性表是...

  • iOS8以后UITableView,cell高度自适应注意点

    注意点一 注意点二

  • 数据结构03-线性表之顺序表

    第三章 线性表之顺序表 第三章 线性表之顺序表一、什么是线性表?1> 概念2> 线性表的基本操作二、线性表的顺序存...

  • 线性表( Java 版 )

    带着问题思考 线性表是什么 ? 哪些应用场景(案例) ? 使用注意事项有哪些 ? 线性表是什么? 从图中可以看出...

  • 数据结构目录

    一、绪论二、算法概论三、时间复杂度与空间复杂度四、线性表(一)、概念四、线性表(二)、线性表的抽象数据类型四、线性...

  • 线性表数据结构

    线性表 线性表就是数据排成像一条线的结构,每个线性表上的数据最多只有前和后两个方向。与线性表对立的是非线性表,如二...

  • 集合

    Collection 注意线性表的contains和remove方法都得遍历判断equals,要注意自定义类实现e...

  • 线性表--基本概念

    线性表--基本概念 一、定义 线性表(List):由零个或多个数据元素组成的有限序列。 注意: 首先它是一个序列,...

网友评论

      本文标题:线性表的注意点(二)

      本文链接:https://www.haomeiwen.com/subject/klpgyttx.html