数据结构学习记录_2019.02.22

  • 数组的表示的方法:

(1)结构数组存储非零项(二元数组)

(2)链表存储非零项:每个结点包含系数和指数两个数据域以及一个指针域,coef-expon-link

typedef struct PolyNode *Polynomial;
struct PolyNode
{
    int coef;
    int expon;
    Polynomial link;
}
  • 线性表(List):同类型数据元素构成的有序序列的线性结构;
  • 关于typedef:

   typedef  int  elemtype;------为某一些类型自定义名称,即为int类型起名字为elemtype;

    typedef struct LNode *List;//为LNode结构起别名为List(且List为指针类型); 
    struct LNode//定义结构类型LNode; 
    {
        ElementType Data[MAXSIZE];
        int Last;
    }
    struct LNode L;//由结构类型LNode 来定义变量L; 
    List PtrL;       //定义指针类型的结构变量PtrL;
  • 访问结构中元素:L.Data[i]
  • 访问指针结构中元素:PtrL->Data[i]
  • L=(linklist)malloc(sizeof(struct lnode));

为你的结点L动态分配内存
你前面结构体是否这样定义的
typedef struct lnode
{ ...数据项
}*linklist;
函数的原型extern void *malloc(unsigned int num_bytes)
(linklist)是你定义的这种struct lnode这种类型的指针,也可以写成(struct lnode*)malloc(...)
因为如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL
其中sizeof是取你定义的结构体取其总的字节数,即malloc后的括号内是要分内内存空间的大小
用sizeof函数获取
而整个分配的返回值是你定义结点*L的指针 也就是L

  • free(s):释放s节点所占用的空间;
  • 线性表的链式存储:即把逻辑相邻的元素通过“链”建立起逻辑关系,而不要求物理上相邻;(插入、删除不需要修改数据元素,只需要修改链)
  • 广义表(Generalized List):线性表的推广,多重链表,表中元素不仅可以是单元素,也可以是另一个广义表;(例子:二元多项式)
  • 多重链表:链表中的指针可能同时隶属于多个链,结点的指针域有多个;(但有两个指针域的链表不一定是多重链表,比如双向链表不是多重链表)
  • 例:二位数组的表示

(1)用二位数组表示:缺点:数组的大小要提前确定,稀疏矩阵会造成大量的存储空间浪费;

posted @ 2019-02-22 16:58  Bran_don  阅读(316)  评论(0编辑  收藏  举报