下列函数试图求链式存储的线性表的表长,为啥是错的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了下列函数试图求链式存储的线性表的表长,为啥是错的?相关的知识,希望对你有一定的参考价值。

int Length ( List *PtrL )

List *p = PtrL;

int j = 0;

while ( p )

p++;

j++;



return j;

参考技术A 在函数中形参不能变化,如果用getelem(l,i,e)的话就算在函数中给e赋了值,退出函数后e也不会改变getelem(l,i,&e),&是取地址符,这样可以直接操纵e的地址,从而实现在函数中给e赋值 参考技术B p++;
这个错了
不能通过++获取下一个元素本回答被提问者和网友采纳
参考技术C p++只能用于连续空间进行指针位移获取下一元素,而链表非连续空间。

线性表- 顺序存储结构- 顺序表

参考技术A

  顺序表

   顺序表的定义

  ( ) 顺序存储方法

  即把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法

  ( ) 顺序表(Sequential List)

  用顺序存储方法存储的线性表简称为顺序表(Sequential List)

   结点a i 的存储地址

  不失一般性 设线性表中所有结点的类型相同 则每个结点所占用存储空间大小亦相同 假设表中每个结点占用c个存储单元 其中第一个单

  元的存储地址则是该结点的存储地址 并设表中开始结点a 的存储地址(简称为基地址)是LOC(a ) 那么结点a i 的存储地址LOC(a i

  )可通过下式计算

  LOC(a i )= LOC(a )+(i )*c ≤i≤n

  注意

  在顺序表中 每个结点a i 的存储地址是该结点在表中的位置i的线性函数 只要知道基地址和每个结点的大小 就可在相同时间内求出任一结

  点的存储地址 是一种 随机存取结构

   顺序表类型定义

  #define ListSize //表空间的大小可根据实际需要而定 这里假设为

  typedef int DataType; //DataType的类型可根据实际情况而定 这里假设为int

  typedef struct

  DataType data[ListSize];//向量data用于存放表结点

  int length;//当前的表长度

  SeqList;

  

  注意

  ① 用向量这种顺序存储的数组类型存储线性表的元素外 顺序表还应该用一个变量来表示线性表的长度属性 因此用结构类型来定义顺序表类

  型

  ② 存放线性表结点的向量空间的大小ListSize应仔细选值 使其既能满足表结点的数目动态增加的需求 又不致于预先定义过大而浪费存储

  空间

  ③ 由于C语言中向量的下标从 开始 所以若L是SeqList类型的顺序表 则线性表的开始结点a 和终端结点a n 分别存储在L data[ ]和

  L Data[L length ]中

  ④ 若L是SeqList类型的指针变量 则a 和a n 分别存储在L >data[ ]和L >data[L >length ]中

   顺序表的特点

  顺序表是用向量实现的线性表 向量的下标可以看作结点的相对地址 因此顺序表的的特点是逻辑上相邻的结点其物理位置亦相邻

lishixinzhi/Article/program/sjjg/201311/23372

以上是关于下列函数试图求链式存储的线性表的表长,为啥是错的?的主要内容,如果未能解决你的问题,请参考以下文章

6-3 求链式表的表长(10 分)

4-3 求链式表的表长 (10分)

6-3 求链式表的表长 (10 分)

用C语言求线性表交集

JAVA线性表

求线性表在链接存储结构下插入与删除的完整源代码