数据结构,C语言(部分基础杂碎知识)

简介: 数据结构,C语言(部分基础杂碎知识)
#include<stdio.h>
#include"string.h"
int main(){
    int i=0;         //栈
    return 0;
}

内存分区中最重要的两大区域:堆和栈

        1.  首先来介绍栈是用来干嘛的

        栈由操作系统自由分配释放,用来存放函数的参数值和变量值,函数中定义的局部变量,

栈的内存较小,有时候我们常常使用的递归算法,需要大量调用栈,有时操作不当,就会导致栈溢出。

          2.      堆

    堆的内存有很大,一般由开发人员(程序员开发),

用来动态申请内存的,都是申请内存在堆上。堆中存储的数据若未释放,则其生命周期等同于程序的生命周期,堆因为是程序员操控,可能会出现内存泄漏

        堆和栈的一些不同

1.使用方式不同,一个是系统自动申请和释放,一个是程序员主动申请和释放。

2.空间大小不同,栈的内存远小于堆

3.生长方向不同。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低。

4.堆一般都是动态分配,

5.分配效率不同。栈由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆的实现机制较为复杂,频繁的内存申请容易产生内存碎片。显然,堆的效率比栈要低得多。

6.存放内容不同。栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等

7.两者平时出现的问题 栈是调用栈太多次导致栈溢出,堆是容易出现内存泄漏,但是两个都要注意最好不要出现越界访问这种操作。

函数部分结束

1. malloc:(重要)

在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址

2.calloc:

与malloc相似,不过函数calloc() 会将所分配的内存空间中的每一位都初始化为零

3.realloc:(重要

用来申请扩展内存,假如原始内存为0则会执行malloc的命令 给一个已经分配了地址的指针重新分配空间,可以做到对动态开辟内存大小的调整。

4.free

申请完内存就释放

(二)生成随机数的函数

rand函数和srand函数

 

两个不同的时间,由此可见我们的随机数生成的是一样的,所以 我们需要用srand这个是用来申请种子,srand()里面的参数也要随机数,但参数怎么能是随机数呢?

所以我们需要使用time 这个种子

 

#include"stdio.h"
#include"time.h"
#include"stdlib.h"
//快速排序
void Swap(int*a,int*b){
    int tmp=*b;
    *b=*a;
    *a=tmp;
}
int Partion(int*a,int left,int right){
    int keyi=left;
    while(left<right){
        while(a[right]>a[keyi]){
           -- right;
        }
        while(a[left]<a[keyi]){
            ++left;}
        Swap(&a[left],&a[right]);
    }
    Swap(&a[left],&a[keyi]);
    return left;
    }
void QuickSort(int*a,int left,int right){
    if(left>=right)
        return ;
        int keyi=Partion(a,left,right);
        QuickSort(a, left, keyi-1);
        QuickSort(a, keyi+1, right);
}
int main(){
    int t=0;
    int i=0;
    int a[10]={6,3,2,1,4,5,7,8,9,0};
    clock_t start,end;
    start=clock();
        QuickSort(a, 0, 9);
    end=clock();
    t=end-start;
    printf("函数运行时间:%ld\n",t);
    for(int i=0;i<10;i++){
        printf("%d",a[i]);}
    return 0;
}

 

上面的是时间

 


相关文章
|
2月前
|
存储 缓存 前端开发
【数据结构/C语言】深入理解 双向链表
【数据结构/C语言】深入理解 双向链表
|
5天前
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
|
1月前
|
存储 C语言
C语言版数据结构详解与实现
C语言版数据结构详解与实现
|
2月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
31 1
|
2月前
|
存储 编译器 C语言
C语言的联合体:一种节省内存的数据结构
C语言的联合体:一种节省内存的数据结构
25 0
|
2月前
|
存储 算法 搜索推荐
【数据结构和算法】--- 基于c语言排序算法的实现(2)
【数据结构和算法】--- 基于c语言排序算法的实现(2)
22 0
|
2月前
|
搜索推荐 算法 C语言
【数据结构和算法】--- 基于c语言排序算法的实现(1)
【数据结构和算法】--- 基于c语言排序算法的实现(1)
29 0
|
2月前
|
C语言 C++
【数据结构】C语言实现:栈(Stack)与队列(Queue)
【数据结构】C语言实现:栈(Stack)与队列(Queue)
|
2月前
|
算法 C语言
数据结构和算法——归并排序(有序子列的归并、递归算法、非递归算法、思路图解、C语言代码)
数据结构和算法——归并排序(有序子列的归并、递归算法、非递归算法、思路图解、C语言代码)
18 0
|
2月前
|
存储 算法 安全
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
24 0