08/09

作者: 常人 | 来源:发表于2018-08-09 18:09 被阅读0次

    总结

    动态存储分配

    1、用到的函数:

    a、malloc 函数 :

        1   分配内存快,内存快不初始化

        2   函数的结构为 void*malloc(size_t ,size);

        3  p = (char *)malloc(n + 1);  给具有n个字符的字符串分配空间;p指向未初始化的字符数组(加上空字符为n+1字符)

        4    strcpy(p, "abc");给p指针初始化的一个函数;

        5  strcat(a,b);函数对字符串进行拼接;

    b、calloc

    c、realloc

    d、free 

    使用该函数 释放a,b,c 函数使用是分配占用的空间;否则程序会将内存用光;

    2、动态分配字符串

    二、动态分配数组

    1、int *a  数组a  数组的长会在程序执行时候计算出来,

    形式为:a = malloc(n*sizeof(int));

    2、calloc ()

    函数不但会分配内存块空间, 会通过将所有值设置为0进行初始化;

    函数会自己清除分配的内存;

    3、realloc()   调整数组的大小

    函数是在 calloc  malloc 基础上是使用

    格式:void*realloc(void*ptr,size_t size);

    “悬空指针”

    释放了p所指的内存 但是没有将P 指向另外的有效内存;

    三、链表

    链表是有  一串 结构(结点)  组成  每个结点都  有指向下一结点的指针;(不能随机访问)

    1、声明结点:

    struct node{

    int value ;      //意思  准备存多少个数?

    struct node *next}    ;(next 是(struct node* 类型)  //为什么一定要用到node标记? 写在大括号之前和之后的区别在哪?

    struct node*first = NULL;  把first 初始化为NULL  链表       第一个结点     初始化为空;

    2、创建结点

    步骤:两步

    分配储存,数据存入结点,插入链表;

    临时变量 new_node

                          :struct node*new_node;

    使用函数分配大小:new_node = malloc(sizeof(struct_ node))   //sizeof  单个机构体占的内存字节大小


    (*new_node).value = 10 寻址访问

    -> 右箭头选择符  是 * 和.的组合

    3、在链表开始处插入结点

    需要两条语句:

    修改结点成员next  使其指向首点:next_node->next  = firs t;//  ?  next_node????

    其次:first指向新的结点:

    first = new_node;

    空链表也可以插入 结点

    4、搜索链表

    for循环首选:

    结构:for( p = first ; p = NULL; p = p ->next)

    p = p -next     p = (*p).next;

    5、链表 删除结点

    三步:定位,   改变前一结点“绕过”删除结点,     free 函数释放空间

    方法:追踪指针方法  :指向结点前的一个指针(prev)  ;  当前结点指针 (cur)  ;

    第一步:查找条件:    (list 中删除 n;)

    结构: for(  cur  = list ,prev = NULL;

    cur  != NULL&& cur-> != n ;

    prev = cur ,cur = cur->next);

    第二步:删除

    prev -> next = cur -> next ;

    第三步:释放

    free(cur);

    6、有序链表

    有序链表的查找速快 ,结点插入难度增加;

    四、 指向指针的指针

    相关文章

      网友评论

          本文标题:08/09

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