ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构——连续存储【数组】

2020-03-31 18:52:33  阅读:215  来源: 互联网

标签:存储 struct int PBase arr pArr 数组 Arr 数据结构


1、什么叫做数组

元素类型相同,大小相等(数组传参,只要传进去首地址和长度就行)

2、数组的优缺点:

优点:

  • 存取速度快

缺点:

  • 事先必须知道数组的长度(最大长度)(之后无法更改)
  • 插入删除元素很慢,效率很低(后续所有元素均需移动)
  • 空间通常是有限制的
  • 需要大块连续的内存块

 

#include<iostream>
using namespace std;

//定义了一个数据类型,该数据类型的名字叫做struct Arr, 该数据类型含有三个成员,分别是pBase, len, cnt
struct Arr
{
    int len;//数组最大长度
    int cnt;//数组当前长度
    int* PBase;//数组首地址
};  

//数组初始化
void init_arr(struct Arr* pArr, int length);
//数组是否为空
bool is_full(struct Arr* pArr);
//数组是否满了
bool is_empty(struct Arr* pArr);
//打印指针所有元素
void show_arr(struct Arr* pArr);
//在数组末追加一个元素
void append_arr(struct Arr* pArr,int val);
//在数组某个位置插入一个元素
void insert_arr(struct Arr* pArr, int pos, int val);
//在数组某个位置删除一个元素 并输出被删除元素
void delete_arr(struct Arr* pArr, int pos, int* pval);
//冒泡排个序
void sort_arr(struct Arr* pArr);
//将数组每个元素打印输出
void show_arr(struct Arr* pArr);


int main()
{    
    struct Arr arr;//用数据类型 struct Arr 定义变量 arr
    int val;
    init_arr(&arr, 6);
    append_arr(&arr, 8);
    append_arr(&arr, 6);    
    append_arr(&arr, 1);    
    append_arr(&arr, 5);
    append_arr(&arr, 3);
    show_arr(&arr);
    insert_arr(&arr, 2, 100);
    show_arr(&arr);
    delete_arr(&arr, 3, &val);
    cout << val << endl;
    show_arr(&arr);
    sort_arr(&arr);
    show_arr(&arr);
    return 0;
}

bool is_empty(struct Arr *pArr)
{
    if (pArr->cnt == 0)
        return true;
    else
        return false;
}
bool is_full(struct Arr* pArr)
{
    if ((*pArr).cnt == pArr->len) // (*Parr).和Parr->用法一致
        return true;
    else
        return false;
}
void init_arr(struct Arr* pArr, int length)
{
    pArr->PBase = (int*)malloc(sizeof(int) * length);
    if (pArr->PBase == NULL)
    {    
        cout << "动态分配内存失败" <<endl;
        exit(-1);
    }
    else
    {
        pArr->len = length;
        pArr->cnt = 0;
    }
}
void append_arr(struct Arr* pArr, int val)
{
    if (is_full(pArr)) 
    {
        cout << "数组已满,追加失败" << endl;
    }
    else
    {
        pArr->PBase[pArr->cnt] = val;
        pArr->cnt++;
    }
}
void insert_arr(struct Arr* pArr, int pos, int val)
{
    if (is_full(pArr))
    {
        cout << "数组已满,插入失败" << endl;
    }
    if (pos<1 || pos>pArr->cnt + 1)
    {
        cout << "输入数据有误" << endl;
    }
    else
    {
        for (int i = pArr->cnt-1;i >= pos-1;i--)
        {
            pArr->PBase[i + 1] = pArr->PBase[i];
        }
    }
    pArr->PBase[pos-1] = val;
    pArr->cnt++;
}
void delete_arr(struct Arr* pArr, int pos, int *val)
{
    *val = pArr->PBase[pos - 1]; 
    for (int i = pos - 1;i <= pArr->cnt - 2;i++)
    {
        pArr->PBase[i] = pArr->PBase[i + 1];
    }
    pArr->cnt--;
}
void show_arr(struct Arr* pArr)
{
    for (int i = 0;i <= pArr->cnt - 1;i++)
    {
        cout << pArr->PBase[i] << ' ';
    }
    cout << endl;
}
void sort_arr(struct Arr* pArr)
{
    int i, j, 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;
            }
        }
    }
}

话说这个代码怎么进行修改 我怎么粘贴出来就不能回到上一步了

不管了 先这样吧..

 

标签:存储,struct,int,PBase,arr,pArr,数组,Arr,数据结构
来源: https://www.cnblogs.com/yuuuuu422/p/12607529.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有