数组库编程

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define datatype int

struct array
{
    datatype *pstart;//数组首地址
    int length;//长度
    int sortstat;//有序或者无序 0 无序 1 有序
};

void init(struct array *parr);
void initwithdata(struct array *parr,datatype data);
void initwitharray(struct array *parr,datatype *pdata,int datalength);
void show(struct array *parr);
void addobject(struct array *parr,datatype data);
void addobjects(struct array *parr,datatype *pdata,int datalength);

void main()
{
    struct array mydata;
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    int b[6] = {11,12,13,14,15,16};
    int c[5] = {17,18,19,20,21};
    initwitharray(&mydata,a,10);
    show(&mydata);
    addobjects(&mydata,b,6);
    show(&mydata);
    addobjects(&mydata,c,5);
    show(&mydata);
}

void init(struct array *parr)
{
    parr->pstart = NULL;
    parr->length = 0;
    parr->sortstat = 0;
}

void initwithdata(struct array *parr,datatype data)
{
    parr->pstart=(datatype *)(sizeof(datatype));
    *(parr->pstart) = data;
    parr->length = 1;
    parr->sortstat = 0;
}

void initwitharray(struct array *parr,datatype *pdata,int datalength)
{
    parr->pstart= (datatype *)malloc(sizeof(datatype)*datalength);
    memcpy(parr->pstart,pdata,sizeof(datatype)*datalength);
    parr->length = datalength;
    parr->sortstat = 0;
}

void show(struct array *parr)
{
    if(parr == NULL || parr->pstart ==  NULL || parr->length == 0)
    {
        printf("没有");
        return;
    }
    else
    {
        printf("\n数组此时状态\n");
        for(int i=0;i<parr->length;i++)
        {
            printf("%4d",parr->pstart[i]);
        }
    }

    printf("\n");
}

void addobject(struct array *parr,datatype data)
{
    if(parr != NULL)
    {
        if(parr->pstart == NULL || parr->length == 0)
        {
            initwithdata(parr,data);
        }
        else
        {
            parr->pstart = (datatype *)realloc(parr->pstart,parr->length*sizeof(datatype)+sizeof(datatype));
            parr->pstart[parr->length] = data;
            parr->length++;
        }
    }
    else
    {
        printf("%s","addobject error");
    }

}

void addobjects(struct array *parr,datatype *pdata,int datalength)
{
    if(parr != NULL)
    {
        if(parr->pstart == NULL || parr->length == 0)
        {
            initwitharray(parr,pdata,datalength);
        }
        else
        {
            parr->pstart = (datatype *)realloc(parr->pstart,parr->length*sizeof(datatype)+datalength*sizeof(datatype));
            memcpy(parr->pstart+parr->length,pdata,datalength*sizeof(datatype));
            parr->length += datalength;
        }
    }
    else
    {
        printf("%s","addobjects error");
    }

}
时间: 2024-11-05 01:45:05

数组库编程的相关文章

STM32 HAL固件库编程的文件构架

对于我这种以前只接触过51和AVR单片机编程的小菜来说,现在开始学习STM32的编程,对于函数的功能以及C语言的语法都还好理解,难的是它提供的那一套硬件抽象层(HAL)驱动是怎么和其他的东东搭配在一起组成一个又一个的工程. 首先上两张从ST官方提供的HAL固件库文档截图 从这两张图的话,能对它的构架看出个一二,下面稍稍具体一点分析 HAL固件库编程,它的文件组织大致分三个部分 - HAL驱动 - CMSIS驱动 - 用户编写程序 而假如你使用的是ST官网的开发板,那么你还有一套现成的驱动可供使用

描述性编程与对象库编程的对比

项目中一直使用的是描述性编程,维护期间的感触就是描述性编程的自动化脚本维护太费力,如果系统改版就要基本把脚本全部翻新,我们现在就面临这个问题.因为还没换过工作,所以对对象库编程还只是练习,我个人感觉对象库编程的优势还是很明显的,一直期望在项目中能真正应用对象库编程方式. 个人感觉 描述性编程的优点是脱离对象库,识别对象时不容易出错:缺点是维护脚本太繁琐,尤其遇到系统改版时.幸亏我接手自动化的时候坚决强调要加强脚本的公用性和复用性,合并了好多公用的动作和用例,要不然会相当惨. 个人了解 对象库编程

C Primer Plus (第五版) 第十六章 C预处理器和C库 编程练习

第十六章 C预处理器和C库 开发一个包含您需要使用的预处理器定义的头文件 //max.h  #ifndef _MAX_H_     #define _MAX_H_     #define MAX(X, Y) ((X)>(Y)?(X):(Y)) #endif 2.两个数的调和平均数可用如下方法得到:首先对两数的倒数取平均值,最后再取倒数.使用#define指令定义一个宏"函数"执行这个运算.编写一个简单的程序测试该宏. #include <stdio.h> #defin

JavaScript中数组高级编程实践

今天我们来全面介绍 JavaScript 中 数组的高级使用,与EcmaScript5 Array API 实战. 利用这些新的API 和 技巧,将提高你的开发效率 和 代码的水平. 理解这些原生的API是 非常有必要的,假以时日,我们也可以写出 underscore ...这样的工具库来. Come on Baby! 先看一下 Array.prototype 的全家福. 在JavaScript 中,数组就是有顺序的存储一系列值,长度动态扩容. ,先看我们的EcmaScript 规范中的  对

二维数组 面向对象编程的概念、 类、对象以及引用 和成员方法

1.二维数组(熟悉)1.1 基本概念 一维数组本质上就是一段连续的存储单元,用于存放多个类型相同的数据内容. 二维数组本质上就是由多个一维数组组成的数组,也就是说二维数组中的每个元素都是一维数组,而一维数组的每个元素才是具体数据内容. 1.2 二维数组的声明(1)语法格式 数据类型[][] 数组名称 = new 数据类型[行数][列数];如: int[][] arr = new int[2][5]; - 声明一个具有2行5列元素类型为int的二维数组 其中行下标的范围是:0 ~ 1: 其中列下标

JavaScript中数组高级编程实践-2

我们来 看 EcmaScript5 规范中的 数组新的API ,它们是非常有用的, 介绍完这一部分 ,我们将用 Array 数组 这个对象 来构建 一个类似于Java中ArrayList 类, 以便于封装 通用 的逻辑,实现代码复用. API : /** @param {Function} callback @param {Object} [initialValue] @return {Object} */ Array.prototype.reduce = function(callback,i

STM32 Cube固件库编程之新建工程

Cube固件库是ST现在主推的固件库,并且在它的官网已经找不到原来的标准库可供下载.Cube固件库的构架图如下 这种新式构架可以有效的加快软件工程师的工程进度. 新建一个工程项目主要包括以下的步骤: 1.使用它提供的模板或是拷贝一个现有的工程 2.加入你可能用到的middleware 3.拷贝相应的HAL及middleware的配置头文件到你的工程中 4.检查主函数中调用的HAL_Init() 5.配置系统时钟 6.初始化外围 7.这一步就是根据你的设计要求写你自己的工程了

FFMPEG基础库编程开发学习笔记——FFMPEG概述

声明一下:这些关于ffmpeg的文章只是用于记录我的学习历程和以便于以后查阅,文章中的一些文字可能是直接摘自于其他文章.书籍或者文献,学习ffmpeg相关知识是为了使用在Android上,我也才是刚开始接触学习,如有不对之处还请指出. 1.FFMPEG简介 Open-source multimedia library,遵从GPL/LGPL协议,ffmpeg只是一个商标,它的所有权属于ffmpeg org.由Fabrice Bellard(法国著名程序员 Born in1972)于2000年发起创

#学习笔记#——JavaScript 数组部分编程(七)

24.柯里化 首先想解释一下,“柯里化”的意思, [在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术.这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的.]——from 百度百科 题目描述 已知 fn 为一个预定义函数,实现函数 curryIt,调用