C数据结构基础

C数据结构基础

一些基本数据结构的个人理解,欢迎指正。

  • 数组
  • 字符串
  • 链表
  • 红黑树
  • 查找和排序

数组

    数组:内存预分配,顺序存储,空间效率差,但是可以在O(1)时间复杂度下实现数据读写,时间效率高。
    哈希表:可以利用数组的快速查找来构造哈希表,如下:
    1. 把数组下标设置为哈希表的key;
    2. 下标对应的内存中存储value;
    3. 借此可以实现O(1)的查找;

    数组的空间效率低,但是在C++ STL中的动态数组解决了这一弊端<vector>,vector会动态申请分配内存,每次重新分配内存时,为前一次分配的两倍。vector把数据复制到新申请的内存中,再将之前的内存释放,这样虽然提高空间效率,但是频繁的申请释放内存会导致时间效率降低,当我们使用vector时候,应该尽量避免数组容量的变化。

    数组和指针的区别:
        int data[] = {1, 2, 3, 4, 5};
        int *data2 = data;
        int size3 = GetSize(data);
        printf("size1 is %d.", sizeof(data));
        printf("size2 is %d.", sizeof(data2));
        printf("size3 is %d.", size3);
上述代码块中,size1 is 20;---->求数组的大小(5 * 4)(5个数字,每个int型占4字节)。
            size2 is 4; ---->一个整型指针变量,占4字节。
            size3 is 4; ---->当数组作为函数参数进行传递的时候,退化为同类型的指针。

字符串

字符串的初始化:
        char str1[] = "hello world";
        char str2[] = "hello world";
        char* str3 = "hello world";
        cahr* str4 = "hello world";
str1 != str2; --->初始化的时候分配的是两块不同的内存,虽然存储的数据相同;
str3 == str4; --->初始化的时候只是初始化一个指针变量,但是数据存储在 常量数据区,为一块内存,因此相等。
在C#中,system.string 操作过程中,原始的字符串不会改变。
system.stringBuilder 若设计多次修改字符串内容,比较推荐这个方法。

链表

待补充。 git仓库地址

待补充。

红黑树

待补充。

查找和排序

待补充。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值