09连续存储数组算法演示

连续存储数组算法

模块一:线性结构(所有的节点用一跟直线穿起来)

  • 连续存储 [数组]

    1.什么叫做数组:元素类型相同,大小相等

    2.数组的优缺点:

  • 离散存储 [链表]

  • 线性结构的两种常见应用之一 栈

  • 线性结构的两种常见应用之二 队列

    专题:递归

    1. 1+2+3+4+...+100的和!
# include <stdio.h>
# include <malloc.h>  //包括了malloc函数
# include <stdlib.h>  //包含了exit函数


//定义一个数据类型,名为struct Arr含有3个成员
struct Arr
{
    int * pBase;//存储的是数组第一个元素的地址
    int len;    //数组所能容纳的最大元素的个数
    int cnt;    //当前数组有效元素的个数
    //int increament;//自动增长因子
};
  
    
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位则下标为0),val为元素
bool delete_arr(struct Arr * pArr, int pos, int * pVal); //(对象,位置,删除的值)   
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 inversion_arr(struct Arr * pArr);//倒置
  
//主函数来测试写的功能函数
int main(void)
{
   struct Arr arr;
    init_arr(&arr, 6);
    printf("%d\n",arr.len);
    show_arr(&arr);
    //测试append()函数的功能
    append_arr(&arr, 1);
    append_arr(&arr, 2);
    append_arr(&arr, 3);
    append_arr(&arr, 4);
    append_arr(&arr, 5);
    if(append_arr(&arr, 8))
    {
        printf("追加成功\n");
    }
    else
    {
        print("追加失败!\n");
    }
    //测试2
    show_arr(&arr);
    inversion_arr(&arr);
    printf("倒置后的数组内容是:\n",%d);
    show_arr(&arr);
    sort_arr(&arr);
    show_arr(&arr);
    
    
   return 0; 
}

void init_arr(struct Arr * pArr, int length)
{
    pArr->len = 99;//(*pArr).len = 99;
    pArr->pBase = (int *)malloc(sizeof(int)*length);
    if (NULL == PArr->pBase)//分配失败直接NULL分配给pBase
    {
        printf("动态内存分配失败!\n");
        exit(-1);\\终止整个程序
    }
    else
    {
       pArr->len = length;
       pArr->cnt = 0;
    }
    return;//无返回值,函数终止标志
}

bool is_empty(struct Arr * pArr)
{
     if(0 == pArr->cnt)//有效数字为0
        return ture;
     else
         return false;
}
        
void show_arr(struct Arr * pArr)
{
    if (is_empty(pArr))
    {
        printf("数组为空!\n");
    }
    else
    {
        for(int i; i<pArr->cnt; ++i)
            printf("%d\n",pArr->pBase[i]);//int *
        printf("\n");
    }
}
//添加数组元数
bool append_arr(struct Arr * pArr, int val)
{
    //满时返回false
    if(is_full(pArr))
        return false;
    //不满时追加元素
    pArr->pBase[pArr->cnt] = val;//有效位数值序号就是最后添加数值的下标
    (pArr->cnt)++;//总有效位数加1
    return true;
}
//插入数组元素    
bool inset_arr(struct Arr * pArr, int pos, int val)    
{
    int i;
    //情况1:元素满了
    if(is_full(pArr))
        return false;
    //情况2:插入位置不符合条件
    if (pos<1 || pos>pArr->cnt+1)
        return false
     //情况3:插入没满且位置合理
    for(i = pArr->cnt-1; i>=pos-1; --i)
    {
        pArr->pBase[i+1] = pArr->pBase[i];
    }
    pArr->pBase[pos-1] = val;
    return true;
}
//删除
bool delete_arr(struct Arr * pArr, int pos, int * pVal)
{
    //1:数组为空
    if(is_empty)
        return false;
    //2:删除位置异常
    if(pos<1 ||pos>pArr->cnt)
        return false;
    //3:删除位置正确
    *pVal = pArr->pBase[pos-1];//返回删除的位置上的值
    for(i=pos; i<pArr->cnt; ++i)
    {
        pArr->pBase[i-1] = pArr->pBase[i];
    }
    pArr->cnt--;//删除一次结构体数组有效位置减1个
}
//倒置
void inversion_arr(struct Arr * pArr)
{
    int i = 0;
    int j = pArr->cnt-1;
    int t;//中间变量
    while(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;
    int 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;
            }
        }
    }
}

重点:通过结构体变量的指针来实现

  • pst->sid
  • pst所指向的结构体变量中的sid这个成员
posted @   夜月明  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示