原始线性结构数组的实现以及操作

不多说直接上代码:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

struct Arr {
    int *pBase;
    int len;
    int cnt;
};
void init_arr(struct Arr *pArr,int length);//初始化一个数组
void show_arr(struct Arr *pArr);//显示某一个数组
bool isEmpty(struct Arr *pArr);//判断一个数组是不是空的
bool append(struct Arr *pArr,int val);//追加
bool is_full(struct Arr *pArr);
bool inserst(struct Arr *pArr,int pos,int val);
bool delete_arr(struct Arr *pArr,int pos,int *pVal);
bool getElement(struct Arr *pArr,int pos,int *pVal);
void sort_arr(struct Arr *pArr);
void inversion_arr(struct Arr *pArr);

int main(void) {
    int val;
    struct Arr arr;
    init_arr(&arr,9);
    show_arr(&arr);
    append(&arr,1);
    append(&arr,2);
    show_arr(&arr);
    inserst(&arr,1,8);
    inserst(&arr,2,9);
    show_arr(&arr);
    delete_arr(&arr,2,&val);
    printf("删除的是第2个位置的值为%d\n",val);
    show_arr(&arr);
    getElement(&arr,2,&val);
    printf("得到的值是:%d\n",val);
    sort_arr(&arr);
    printf("排序\n");
    show_arr(&arr);
    printf("倒置\n");
    inversion_arr(&arr);
    show_arr(&arr);
    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;
}
//显示数组中的具体内容
void show_arr(struct Arr *pArr) {
    if(isEmpty(pArr)) {
        printf("数组为空\n");
    } else {
        for(int i=0; i<pArr->cnt; i++) {
            printf("%d   ",pArr->pBase[i]);
        }
        printf("\n");
    }

}
//判断一个数组是不是空的
bool isEmpty(struct Arr *pArr) {
    if( 0 == pArr->cnt) {
        return true;
    } else {
        return false;
    }
}

//追加参数
bool append(struct Arr *pArr,int val) {
    if(is_full(pArr)) {
        printf("数组已满,不宜插入\n");
        return false;
    } else {
        pArr->pBase[pArr->cnt] = val;
        pArr->cnt++;
        return true;
    }
}

//判断数组是不是已经满了
bool is_full(struct Arr *pArr) {
    if(pArr->len == pArr->cnt) {
        return true;
    } else {
        return false;
    }
}
//向数组中插入数据
bool inserst(struct Arr *pArr,int pos,int val) {
    if(pos<1 || pos>pArr->cnt+1) {
        printf("插入位置有误\n");
        return false;
    }
    if(is_full(pArr)) {
        printf("数组已满\n");
        return false;
    }
    for(int 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(isEmpty(pArr)) {
        printf("数组为空!\n");
        return false;
    }

    if(pos<1 || pos>pArr->cnt) {
        printf("要删除位置的值不存在\n");
        return false;
    }

    *pVal = pArr->pBase[pos-1];
    for(int i =pos; i<pArr->cnt; i++) {
        pArr->pBase[i-1] = pArr->pBase[i];
    }
    pArr->cnt--;
    return true;
}
//得到相对应位置的参数
bool getElement(struct Arr *pArr,int pos,int *pVal) {
    if(isEmpty(pArr)) {
        printf("数组为空!\n");
        return false;
    }

    if(pos<1 || pos>pArr->cnt) {
        printf("位置的值不存在\n");
        return false;
    }
    *pVal = pArr->pBase[pos-1];
    return true;
}
//将相对应的数组进行一定规模的排序
void sort_arr(struct Arr *pArr) {
    int t;
    if(isEmpty(pArr)) {
        return;
    }
    for(int i=0; i<pArr->cnt; i++) {
        for(int 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;
            }
        }
    }
}

//将数组倒置
void inversion_arr(struct Arr *pArr) {
    int t;
    if(isEmpty(pArr)) {
        return;
    }
    int i = 0;
    int j = pArr->cnt-1;
    while(i<j) {
        t = pArr->pBase[i];
        pArr->pBase[i] = pArr->pBase[j];
        pArr->pBase[j] = t;
        i++;
        j--;
    }
}

这一个主要就是和上面的顺序表相互补充,可以相互借鉴,这个应该是最原始的版本了.

如果有问题请@楼主。

时间: 2025-01-16 13:42:36

原始线性结构数组的实现以及操作的相关文章

数据结构 线性结构(数组[列表] ,链表 单链表的增删改查**, 线性结构的应用 队列 栈[函数的调用**]),非线性结构 树

数据结构 参考:http://lupython.gitee.io/ 线性结构 就是能够用一根线串起来的数据结构 数组 (列表) 问:申请数组的前提条件是啥? a[12]?内存需要满足的条件? 答:内存必须有一块连续的内存空间 int a[7] : 声明一个数组,这个数组的数组名是 a, 数组的大小是 7, 数组元素的类型是整型. int a[7] = array(1,2,3,4,5,6,7) 问:如何申请内存? 答:C,C++语言,申请:mallco (28).释放:free(28) 问:int

线性结构 —— 数组队列

一.介绍 ?队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的端称为队头. 二.代码 ?使用数组模拟队列,首先编写一个ArrayQueue类 class ArrayQueue { private int maxSize; // 最大容量 private int front; // 指向队列头 private int rear; // 指向队列尾 p

线性结构-数组和链表的实现

连续存储(数组) 1.什么叫数组? 元素的类型相同,大小相等. 2.优缺点? 查询速度快,增加删除慢 #include <stdio.h> #include <malloc.h> #include <stdlib.h> //定义一个数据类型,名字 Arr,成员分别 struct Arr { int * pBase; //存储的是数组第一个元素的地址 int len; //数组的长度 int cnt; //当前数组有效元素的个数 int increment; //自动增长

线性存储结构--数组

#include<stdio.h> #include<stdlib.h> //定义了一个数据类型叫struct Arr 该数据类型包含 3个成员 struct Arr{ //12个字节 int *pBase;//存储数组第一个元素的地址 int len;//数组所能容纳的最大元素个数 int cnt;//当前数组有效元素的个数 }; //不用指针 用值得话 导致方法里存在局部变量 不能使主方法的改变 只能传地址 void Init_arr(struct Arr *p,int len

c语言实现线性结构(数组与链表)

由于这两天看了数据结构,所以又把大学所学的c语言和指针"挂"起来了. 我是小菜鸟,我为自己代言.下面是我这两天学习的成果(数组和链表的实现,用的是c语言哦!哈哈). (一)数组的实现和操作.代码如下: #include <stdio.h> #include <malloc.h> #include <stdlib.h> struct Array{ int length;//数组长度 int * pBase;//存放数组首元素的地址 int cnt;//

Mooc数据结构-基础和线性结构

1 数据结构 解决问题方法的效率,跟数据的组织方式有关 解决问题方法的效率,跟空间的利用效率有关 解决问题方法的效率,跟算法的巧妙程度有关 数据结构 数据对象在计算机中的组织方式 逻辑结构 物理存储结构 数据对象必定与一系列加在其上的操作相关联 完成这些操作所用的方法就是算法 抽象数据类型(Abstract Data Type) 数据类型 数据对象集 数据集合相关联的操作集 抽象: 描述数据类型的方法不依赖与具体实现 与存放数据的机器无关 与数据存储的物理结构无关 与实现操作的算法和编程语言无关

线性结构

线性表及其实现 [引例]:多项式的表示 一元多项式:f(x)=a0+a1X+...+an-1Xn-1+anXn 主要运算:多项式的相加.相减.相乘等. [分析]如何表示多项式? 多项式的关键数据: 多项式的项数n 各项系数ai及指数i 方法1:顺序存储结构直接表示 数组各分量对应多项式的各项: a[i]:项Xi的系数ai,i是对应的指数 例如:f(x)=4x5-3x2+1,表示成:  0  1   2   3  4  5    ......    下标i 1 0 -3 0 0 4 ......

13. C#数据结构与算法 -- 线性结构

本文中,我们讨论了三个部分的内容: 什么是线性结构,线性结构有哪些特点 . 详细介绍了一个最简单线性结构顺序表,并且通过源代码进行一些的分析. 最后还举了一个例子,让我们更好的理解顺序表. 第一部分:什么是线性结构,线性结构有哪些特点 什么是线性结构,线性结构是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这 种一对一的关系指的是数据元素之间的位置关系,即: (1)除第一个位置的数据元素外,其它数据元素

数据结构第二讲:线性结构

参考:浙大数据结构(陈越.何钦铭)课件 1.线性表及其实现 有一个很好的问题可以方便的说明引入链表的好处,那就是一元多项式:f(x) = a0 + a1x + an-1xn-1 + anxn 的表示及运算(两个多项式相加/相减/相乘等),显然我们可以利用数组来解决这个问题,两个多项式相加就是两个数组对应分量相加.但是这引入了一个很严重的问题,如何表示多项式x + 3x2000呢?开这么大的数组明显会造成空间浪费. 解决上面遗留的问题的一个方法是用结构数组按指数大小有序存储,每一个数组元素维护两个