zoukankan      html  css  js  c++  java
  • 50.商业化数组库开发

    运行结果:  
      1 #include <stdlib.h>
      2 #include <stdio.h>
      3 #include <memory.h>
      4 #define datatype int 
      5 
      6 struct array
      7 {
      8     datatype *pstart;//数组首地址
      9     datatype length;//长度 
     10     datatype sortstate;//有序或者无序
     11 };
     12 
     13 //初始化数组
     14 void init(struct array *parray);
     15 //用数据进行初始化
     16 void initWithData(struct array *parr, datatype data);
     17 //用数组进行初始化
     18 void initWithArray(struct array *parr, datatype *pdata, int dataLength);
     19 //显示数据
     20 void show(struct array *parr);
     21 //尾部添加数据
     22 void addobject(struct array *parr, datatype data);
     23 //尾部添加数组
     24 void addobjects(struct array *parr, datatype *pdata, int dataLength);
     25 //返回第一个找到的元素位置
     26 datatype *findfirst(struct array *parr, datatype data);
     27 //在指定位置前插入数据
     28 void insertobject(struct array *parr, datatype data, datatype insertdata);
     29 //在指定位置之前插入数组
     30 void insertobjects(struct array *parr, datatype data, datatype *pdata, int datalength);
     31 //删除所有元素
     32 void deleteallobject(struct array *parr, datatype data);
     33 
     34 //初始化数组
     35 void init(struct array *parray)
     36 {
     37     if (parray != NULL)
     38     {
     39         parray->pstart = NULL;
     40         parray->length = 0;
     41         parray->sortstate = 0;
     42     }
     43     else
     44     {
     45         printf("init error");
     46     }
     47 }
     48 
     49 //用数据进行初始化
     50 void initWithData(struct array *parr, datatype data)
     51 {
     52     if (parr != NULL)
     53     {
     54         parr->pstart = (datatype *)malloc(sizeof(datatype));
     55         *(parr->pstart) = data;
     56         parr->length = 1;
     57         parr->sortstate = 0;
     58     }
     59     else
     60     {
     61         printf("initWithData error");
     62     }
     63     
     64 }
     65 
     66 //用数组进行初始化
     67 void initWithArray(struct array *parr, datatype *pdata, int dataLength)
     68 {
     69     if (parr != NULL)
     70     {
     71         parr->pstart = (datatype *)malloc(sizeof(datatype)*dataLength);//分配数组的长度
     72         memcpy(parr->pstart, pdata, sizeof(datatype)*dataLength);
     73         parr->length = dataLength;
     74         parr->sortstate = 0;
     75     }
     76     else
     77     {
     78         printf("initWithArray error");
     79     }
     80     
     81 }
     82 
     83 //显示数据
     84 void show(struct array *parr)
     85 {
     86     if (parr == NULL || parr->pstart == NULL || parr->length == 0)
     87     {
     88         printf("没有数据
    ");
     89     }
     90     else
     91     {
     92         for (int i = 0; i < parr->length; i++)
     93         {
     94             printf("%4d", parr->pstart[i]);//打印数据
     95         }
     96         printf("
    ");
     97     }
     98 }
     99 
    100 //尾部添加数据
    101 void addobject(struct array *parr, datatype data)
    102 {
    103     if (parr != NULL)
    104     {
    105         if (parr->pstart == NULL || parr->length == 0)
    106         {
    107             initWithData(parr, data);
    108         }
    109         else
    110         {
    111             parr->pstart = (datatype *)realloc(parr->pstart, (parr->length +1 )*sizeof(datatype));
    112             parr->pstart[parr->length] = data;//插入
    113             parr->length += 1;//长度加1 
    114         }
    115     }
    116     else
    117     {
    118         printf("addobject error");
    119     }
    120 }
    121 
    122 //尾部添加数组
    123 void addobjects(struct array *parr, datatype *pdata, int dataLength)
    124 {
    125 
    126     if (parr != NULL)
    127     {
    128         if (parr->pstart == NULL || parr->length == 0)
    129         {
    130             initWithArray(parr, pdata, dataLength);
    131         }
    132         else
    133         {
    134             parr->pstart = (datatype *)realloc(parr->pstart, (parr->length + dataLength) * sizeof(pdata) );
    135 
    136             memcpy(parr->pstart + parr->length, pdata, dataLength * sizeof(datatype));
    137 
    138             parr->length += dataLength;//长度自增
    139         }
    140     }
    141     else
    142     {
    143         printf("addobject error");
    144     }
    145 }
    146 
    147 //返回第一个找到的元素位置
    148 datatype *findfirst(struct array *parr, datatype data)
    149 {
    150     if (parr == NULL || parr->pstart == NULL || parr->length == 0)
    151     {
    152         printf("没有数据
    ");
    153         return NULL;
    154     }
    155     else
    156     {
    157 
    158         datatype *pfind = NULL;
    159         for (int i = 0; i < parr->length; i++)
    160         {
    161             if (parr->pstart[i] == data)
    162             {
    163                 pfind = &parr->pstart[i];
    164                 break;
    165             }
    166         }
    167         return pfind;
    168     }
    169 }
    170 
    171 //在指定位置前插入数据
    172 void insertobject(struct array *parr, datatype data, datatype insertdata)
    173 {
    174     if (parr != NULL)
    175     {
    176         datatype *pfind = findfirst(parr, data);
    177         if (pfind == NULL)
    178         {
    179             printf("can not insertobject");
    180         }
    181         else
    182         {
    183             int curr = pfind - parr->pstart;//指针相减确定下标
    184             parr->pstart = (datatype *)realloc(parr->pstart, (parr->length + 1) * sizeof(datatype));
    185             
    186             for (int i = parr->length; i > curr; i--)
    187             {
    188                 parr->pstart[i] = parr->pstart[i - 1];
    189             }
    190             parr->pstart[curr] = insertdata;
    191 
    192             parr->length += 1;//长度加1 
    193         }
    194     }
    195     else
    196     {
    197         printf("insertobject error
    ");
    198     }
    199 }
    200 
    201 //在指定位置前插入数组
    202 void insertobjects(struct array *parr, datatype data, datatype *pdata, int datalength)
    203 {
    204     if (parr != NULL)
    205     {
    206         datatype *pfind = findfirst(parr, data);
    207         if (pfind == NULL)
    208         {
    209             printf("can not insertobject");
    210         }
    211         else
    212         {
    213             int curr = pfind - parr->pstart;//指针相减确定下标
    214             parr->pstart = (datatype *)realloc(parr->pstart, (parr->length + datalength) * sizeof(datatype));
    215 
    216             for (int i = parr->length + datalength ; i >= curr+datalength; i--)
    217             {
    218                 parr->pstart[i] = parr->pstart[i - datalength];
    219             }
    220 
    221             for (int i = 0; i < datalength; i++)
    222             {
    223                 parr->pstart[curr + i] = pdata[i];
    224             }
    225 
    226             parr->length += datalength;//长度加1 
    227         }
    228     }
    229     else
    230     {
    231         printf("insertobject error
    ");
    232     }
    233 }
    234 
    235 //删除所有元素
    236 void deleteallobject(struct array *parr, datatype data)
    237 {
    238     int start = 0;
    239     int youbiao = 0;
    240     int count = 0;
    241 
    242     for (int i = 0; i < parr->length; i++)
    243     {
    244         if (parr->pstart[i] == data)
    245         {
    246             count++;
    247             youbiao++;
    248         }
    249         else
    250         {
    251             parr->pstart[start] = parr->pstart[youbiao];
    252             start++;
    253             youbiao++;
    254         }
    255     }
    256     parr->length -= count;
    257 }
    258 
    259 void main()
    260 {
    261     struct array *mydata = new struct array;
    262     int a[10] = { 1,2,1,4,1,6,7,8,9,10 };
    263     int b[6] = { 11,12,13,14,15 ,16};
    264     initWithArray(mydata, a, 10);
    265     show(mydata);
    266     /*addobjects(mydata, b, 5);
    267     show(mydata);*/
    268     /*insertobject(mydata, 8, 11);
    269     show(mydata);*/
    270     //insertobjects(mydata, 1, b, 6);
    271     //show(mydata);
    272     deleteallobject(mydata, 1);
    273     show(mydata);
    274 
    275     system("pause");
    276 }
  • 相关阅读:
    Linux安全加固
    mosquitto
    Docker设置2375端口
    linux shell 常见的时间戳操作
    tar打包并且排除log目录
    spring boot2整合shiro安全框架实现前后端分离的JWT token登录验证
    http post
    scp命令 Linux和Windows文件互传
    git did not exit cleanly (exit code 1) 的解决办法
    windows安装TortoiseGit详细使用教程【基础篇】
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8376640.html
Copyright © 2011-2022 走看看