连续存储数组的算法演示

连续存储数组的算法演示,第1张

连续存储数组的算法演示

上课不仔细听讲的兔期末前的看课学习

通过学习郝斌老师的数据结构视频课,悲惨的兔终于有了点进步

这里分享一个老师演示的一串代码(兔跟着敲了好久,头秃了QAQ)

#include 
#include //bool的头文件
#include //malloc的头文件
#include //sizeof的头文件
#include //exit的头文件

//定义一个数据类型,有三个成员
struct Arr //数组
{
    int * pbase;//存储的数组第一个元素地址
    int len;//数组所能容纳的最大元素个数
    int cnt;//有效元素个数
};

//分号不能省略
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);//插入  pos从1开始   且在第pos前插入一个元素
bool delete_arr(struct Arr * pArr,int pos,int * pVal);//删除
int get(struct Arr * pArr,int pos,int * pVal);//获取下标为啥的值
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 inversion_arr(struct Arr * pArr);//倒置

int main()
{
    struct Arr arr;

    int val;

    int kk;

    init_arr(&arr,10);

    printf("刚分好内存后显示数组:n");
    show_arr(&arr);
   // printf("%d",arr.len);

    append_arr(&arr,1);
    append_arr(&arr,6);
    append_arr(&arr,8);
    append_arr(&arr,4);
    append_arr(&arr,3);
    append_arr(&arr,5);
    append_arr(&arr,7);
    append_arr(&arr,9);
    append_arr(&arr,10);

    printf("显示数组元素:n");
    show_arr(&arr);

    printf("测试删除数组元素有:n");
    if(delete_arr(&arr,2,&val))
    {
        printf("删除成功!n");
        printf("您删除的元素是:%dn",val);
    }
    else
    {
        printf("删除失败!n");
    }


   

    printf("显示删除后的数组元素:n");
    show_arr(&arr);

    printf("get到的位置的数为:n");
    printf("%dn",get(&arr,6,&kk));

    inversion_arr(&arr);
    printf("倒置是:n");
    show_arr(&arr);

    printf("get到的位置的数为:n");
    printf("%dn",get(&arr,6,&kk));

    sort_arr(&arr);
    printf("排序有:n");
    show_arr(&arr);

    printf("get到的位置的数为:n");
    printf("%dn",get(&arr,6,&kk));

    return 0;
}

void init_arr(struct Arr * pArr,int length)
{
    pArr->pbase = (int *)malloc (sizeof(int) * length);//分配动态内存
    if(NULL == pArr->pbase)
    {
        printf("动态内存分配失败!n");
        exit(-1);//终止整个程序
    }
    else
    {
        pArr->len = length;
        pArr->cnt = 0;
    }
    return;
}

bool is_empty(struct Arr * pArr)
{
    if(0 == pArr->cnt)
        return true;
    else
        return false;
}

bool is_full(struct Arr * pArr)
{
    if(pArr->cnt == pArr->len)
        return true;
    else
        return false;
}

bool append_arr(struct Arr * pArr,int val)
{
    //满时返回false
    if(is_full(pArr))
        return false;

    //不满时追加
    pArr->pbase[pArr->cnt] = val;
    (pArr->cnt)++;
    return true;
}

void show_arr(struct Arr * pArr)
{
    if( is_empty(pArr))//pArr已经就是地址
    {
        printf("数组为空!n");
    }
    else
    {
        for(int i = 0;i < pArr->cnt; ++i)
            printf("%d ",pArr->pbase[i]);//pArr是结构体变量的名字地址,pArr->pbase才是
            printf("n");
    }
}

bool insert_arr(struct Arr * pArr,int pos,int val)
{
    int i;

    if(is_full(pArr))
        return false;

    if(pos < 1 || pos > pArr->cnt + 1)  //在pos前插入
        return false;

    for(i = pArr->cnt - 1;i >= pos - 1;--i)
    {
        pArr->pbase[i +1] = pArr->pbase[i];
    }
    pArr->pbase[pos - 1] = val;
    (pArr->cnt)++;
    return true;
}

bool delete_arr(struct Arr * pArr,int pos,int * pVal)
{
    if(is_empty(pArr))
        return false;

     *pVal = pArr->pbase[pos - 1];
    if(pos < 1 || pos > pArr->cnt)
        return false;

    for(int i = pos;i < pArr->cnt;++i)
    {
        pArr->pbase[i - 1] = pArr->pbase[i];
    }
    (pArr->cnt)--;
    return true;
}

void inversion_arr(struct Arr * pArr)
{
    int i = 0;
    int j = pArr->cnt - 1;
    int t;

    if(i < j)
    {
        t = pArr->pbase[i];
        pArr->pbase[i] = pArr->pbase[j];
        pArr->pbase[j] = t;
        ++i;
        --j;
    }
    return;
}

void sort_arr(struct Arr * pArr)
{
    int i,j;
    int t;

    for(i = 0;i < pArr->cnt;i++)
    {
           for(j = i + 1;j < pArr->cnt;j++)
        {
            if(pArr->pbase[i] > pArr->pbase[j])
            {
                t = pArr->pbase[i];
                pArr->pbase[i] = pArr->pbase[j];
                pArr->pbase[j] = t;
            }
        }
    }

}

int get(struct Arr * pArr,int pos,int * pVal)
{
    if(is_empty(pArr))
        return false;

    if(pos < 1 || pos > pArr->cnt)
        return false;

     * pVal = pArr->pbase[pos - 1];

    return * pVal;

}

下图是兔在codeblock上编译的结果

 兔学到了很多,也非常感谢郝斌老师

兔会继续努力的!!!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5610956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存