zoukankan      html  css  js  c++  java
  • 数据结构学习笔记(1)——连续存储数组的算法演示

    说明(2018-3-11 19:58:05):

    1. 郝斌的数据结构视频。

    2. 用C语言模拟了泛型集合的一部分常用方法。

    3. 主要使用了指针的操作。

    #include<stdio.h>
    #include<stdbool.h>
    #include<malloc.h>
    #pragma warning(disable:4996)//忽略VS2013警告
    
    
    void init_arr(struct Arr *pArr, int length);
    bool append_arr(struct Arr * parr, int val);
    bool insert_arr(struct Arr *pArr, int pos, int val);
    bool delete_arr();
    int get();
    bool is_empty(struct Arr * pArr);
    bool is_full(struct Arr * pArr);
    void sort_arr(struct Arr *pArr);
    void show_arr(struct Arr * pArr);
    void reverse_arr(struct Arr * pArr);
    
    struct Arr
    {
        int * pBase;//存储数组中第一个元素的地址
        int len;
        int cnt;
    
    };
    
    void main()
    {
        struct Arr arr;
        init_arr(&arr, 6);//分配6个元素
        int del_num;//用来保存删除的数字
        append_arr(&arr, 2);
        append_arr(&arr, 10);
        append_arr(&arr, 8);
        append_arr(&arr, 3);
        append_arr(&arr, -5);
        append_arr(&arr, 0);
        show_arr(&arr);
        printf("
    ");
        delete_arr(&arr, 1, &del_num);
        printf("删掉的值是%d
    ", del_num);
        //insert_arr(&arr, 0, 88);
        //sort_arr(&arr);
        reverse_arr(&arr);
        show_arr(&arr);
        system("pause");
    }
    
    void init_arr(struct Arr *pArr, int length)
    {
        pArr->pBase = (int *)malloc(sizeof(int)*length);
        if (pArr->pBase == NULL)
        {
            printf("动态分配内存失败!");
            exit(-1);//退出程序
        }
        else
        {
            pArr->len = length;
            pArr->cnt = 0;
        }
        return;
    }
    
    bool is_empty(struct Arr * pArr)
    {
        if (pArr->cnt == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    void show_arr(struct Arr * pArr)
    {
        if (is_empty(pArr))
        {
            printf("数组为空!");
        }
        else
        {
            for (int i = 0; i < pArr->cnt; i++)
            {
                printf("%d ", pArr->pBase[i]);
            }
            printf("
    ");
        }
    }
    
    bool is_full(struct Arr * parr)
    {
        if (parr->cnt == parr->len)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    bool append_arr(struct Arr * parr, int val)
    {
        if (is_full(parr))
        {
            return false;
        }
        else
        {
    
            parr->pBase[parr->cnt] = val;
            parr->cnt++;
            return true;
        }
    }
    
    bool insert_arr(struct Arr *pArr, int pos, int val)
    {
        if (is_full(pArr))
        {
            printf("数组已满,无法插入");
            return false;
        }
        else if (pos > pArr->cnt + 1 || pos <= 0)
        {
            printf("插入位置有误!");
            return false;
        }
        else
        {
            //11,22,33,空,空,空
            // 0, 1, 2, 3, 4, 5
            pArr->cnt += 1;
            for (int i = pArr->cnt - 1; i >= pos; i--)
            {
                pArr->pBase[i] = pArr->pBase[i - 1];
    
            }
            pArr->pBase[pos - 1] = val;
            return true;
        }
    }
    
    void sort_arr(struct Arr *pArr)
    {
        //2,10,8,3,-5,0冒泡排序
        int t;
        for (int i = 0; i < pArr->cnt; i++)
        {
            for (int j = 0; j < pArr->cnt - i - 1; j++)//每次循环选出一个最大值放在最后,就不用再排它了
            {
                if (pArr->pBase[j] > pArr->pBase[j + 1])
                {
                    t = pArr->pBase[j];
                    pArr->pBase[j] = pArr->pBase[j + 1];
                    pArr->pBase[j + 1] = t;
                }
            }
        }
        return;
    }
    
    bool delete_arr(struct Arr * pArr, int pos, int * del_num)
    {
        *del_num = pArr->pBase[pos - 1];
        if (pos > 0 && pos <= pArr->cnt)
        {
            for (int i = pos - 1; i < pArr->cnt; i++)
            {
                pArr->pBase[i] = pArr->pBase[i + 1];
            }
            pArr->cnt--;
            return true;
        }
        else
        {
            printf("该位置不存在元素
    ");
        }
    }
    
    
    void reverse_arr(struct Arr * pArr)
    {
        int t;
        for (int i = 0; i < pArr->cnt / 2; i++)
        {
            t = pArr->pBase[i];
            pArr->pBase[i] = pArr->pBase[pArr->cnt - i - 1];
            pArr->pBase[pArr->cnt - i - 1] = t;
        }
        return;
    }
  • 相关阅读:
    redis之通信开销限制redis cluster规模的关键因素
    redis解决秒杀问题与数据倾斜
    codis与redis
    脑裂中的数据丢失
    redis主从同步与故障切换的配置项可能出现的问题
    redi事务机制
    redis并发访问的问题之实现分布式锁
    redis的小功能 bitmaps 发布订阅,HyperLogLog GEO LUA
    redis之api学习
    Ubuntu17.04安装WineQQ7.8及微信
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/8545522.html
Copyright © 2011-2022 走看看