连续存储_数组

来源:互联网 发布:addiction动作数据mmd 编辑:程序博客网 时间:2024/05/17 09:26
#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);int 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);int get();int is_empty(struct Arr * pArr);int 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){    int pos;    struct Arr arr;    /* 初始化array */ init_arr(&arr,5); /* 添加元素 */ append_arr(&arr,1); append_arr(&arr,2); append_arr(&arr,3); append_arr(&arr,4);     /* 插入元素 */ insert_arr(&arr,3,999);     /* 删除元素 */ delete_arr(&arr,2,&pos); printf("删除元素-->%d\n",pos); /* 排序 */ sort_arr(&arr); /* 遍历数组 */ show_arr(&arr); /* --------------------- */ printf("%d\n",arr.len);    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){    int i;    if(is_empty(pArr))    {        printf("数组为空!\n");    }    else    {      for(i=0;i<pArr->cnt;i++)      {      printf("arr[%d]-->%d\n",i,pArr->pBase[i]);  }    }}int is_empty(struct Arr * pArr){if(0 == pArr->cnt){return 1;}else{return 0;}}int is_full(struct Arr * pArr){if(pArr->cnt == pArr->len){return 1;}else{return 0;}}int append_arr(struct Arr * pArr , int val){if(is_full(pArr)){//数组已满,不能追加printf("数组已满,不能追加!\n");exit(-1);}else{pArr->pBase[pArr->cnt] = val;(pArr->cnt)++;}return 0;}/* * 在位置为pos元素前面插入val, pos的值从1开始 */void insert_arr(struct Arr * pArr , int pos , int val){    if(pos < 0 || pos > pArr->cnt)    {     printf("输入下标错误!\n");     return;    }    if(is_full(pArr))    {    printf("数组已满,不能插入!\n");return;    }    int i;    for(i=pArr->cnt;i>=pos;i--)    {pArr->pBase[i] = pArr->pBase[i-1];    }    pArr->pBase[pos-1] = val; (pArr->cnt)++;}void delete_arr(struct Arr * pArr , int pos , int * pVal){    int i;    if(is_empty(pArr)){        return;    }    if(pos < 1 || pos > pArr->cnt)    {        return;    }    //保留被删除的元素    *pVal = pArr->pBase[pos-1];    for(i=pos;i<pArr->cnt;i++)    {        pArr->pBase[i-1] = pArr->pBase[i];    }    (pArr->cnt)--;}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,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;            }        }    }    return;}

原创粉丝点击