zoukankan      html  css  js  c++  java
  • 01_什么是数据结构以及C语言指针回顾

    一、数据结构是什么

    1. 如何把现实中大量而复杂的问题,以特定的数据类型和特定的数据存储结构保存到计算机的存储器中。
    2. 数据存储包括两方面:个体存储的集合、个体与个体之间的关系的存储
    3. 程序 = 算法 + 数据结构  -->  针对实际问题选择一个好的数据结构,设计一个好的算法

    二、数据结构中各名词解释

    数据:表示客观事物的符号,比如98(不同语义下可能是成绩,也可能是体重),数据还包括音乐,图像,视屏等。

    数据项:组成数据的基本单位

    结点:

    三、数据结构的两大分类

    线性存储

       连续存储

       散列存储(链式存储)

    非线性存储

    四、结构体

    什么叫结构体

    用户根据自己的需求,自己定义的复合型数据类型。

    为什么会出现结构体

    为了表示复杂的数据类型,基本数据类型无法满足要求。比如学生。有sid(学号)、name、age...。基本的数据类型无法表达

    怎么使用结构体

     1      struct Student{ 
     2             int sid;//学生的学号
     3             int age;//学生的年龄
     4             char name[200];//学生的姓名
     5         };
     6 
     7         struct Student st = {100,"zhangsan",30}
     8         
     9         struct Student st;    
    10         st.sid = 100;
    11         st.age = 30;
    12         strcpy(st.name,"zhangsan");
    13         
    14         stuct Student *pst;
    15         pst = &st;
    16         pst->sid = 199;
    17         pst->age = 30;
    18         strcpy(pst->name,"zhangsan");

    结构体注意事项:

    1. 结构体能相互赋值,但不能加减乘除运算
    2. 普通结构体和结构体指针变量 作为函数传递参数问题

    五、动态内存分配

    动态的分配 : 可以手工分配内存大小,在不使用的情况下,可以手动释放所占用的内存

    静态内存分配:程序运行结束,才会释放所占用的内存、不能动态的增加或减少,直至程序运行结束

    1 动态内存分配:int *pArr = (int*)malloc(sizeof(int) * len);
    2 静态内存分配: int arr[5] = {0,1,2,3,4};

    六、指针

    在五、动态内存分配中,定义了一个指向整型变量的指针pArr。那么pArr和arr有什么联系呢?

    1. 内存大小:pArr = 4 => arr[0] = 4; 都是占用4个字节,因为数组名保存的是数组首元素的地址
    2. 指向:pArr 指向内存块的首地址,相当于arr[0]
    3. pArr + 1 => arr[1] 表示第二块内存地址
    4. *(pArr + 1)// = 1 <= a[1] 表示 第二块内存的内容

    七、跨函数使用内存

    一句话搞定:使用molloc分配空间可以跨函数使用内存

    八、Typedef

    为已有的数据类型起个别名

        typedef int zhangsan; zhangsan i == int i
        
            (1)
            typedef struct Student
            {
                int sid;
                char name[100];
                char sex;                
            }ST;
        
            stuct Student st == ST st
        
            (2)
            typedef struct Student
            {
                int sid;
                char name[100];
                char sex;                
            }* PST;
            
            struct Student *pst;
            PST pst;
    
    
            (3)
            typedef struct Student
            {
                int sid;
                char name[100];
                char sex;                
            }* PST,ST;
            
            ST      代表了 struct Student
            PST     代表了 struct Student*
  • 相关阅读:
    #斯坦纳树#洛谷 4294 [WC2008]游览计划
    #位运算#CF959E Mahmoud and Ehab and the xor-MST
    #构造#洛谷 6470 [COCI2008-2009#6]CUSKIJA
    #dp#洛谷 6855 「EZEC-4.5」走方格
    #容斥,排列组合#U138404 选数字
    #线段树合并#JZOJ 5365 通信
    #树上启发式合并,trie#JZOJ 5363 生命之树
    #循环节,gcd#JZOJ 5362 密码
    #树状数组、dp#JZOJ 5361 捕老鼠
    #dp#JZOJ 1281 旅行
  • 原文地址:https://www.cnblogs.com/weihengblog/p/8322509.html
Copyright © 2011-2022 走看看