• 数据结构之C语言模拟整数数组实现


      1 #include <stdio.h>
      2 #include <malloc.h>
      3 #include <stdlib.h>
      4 
      5 typedef struct Arr
      6 {
      7     int * pBase = NULL; //数组首地址
      8     int cnt; //当前元素个数
      9     int len; //数组大小
     10 } Array, *pArray;
     11 
     12 
     13 bool init_array(pArray arr, int len);
     14 bool append(pArray arr, int val);
     15 bool is_empty(pArray arr);
     16 bool is_full(pArray arr);
     17 void sort(pArray arr);
     18 void reversal(pArray arr);
     19 void show_array(pArray arr);
     20 bool insert(pArray arr, int pos, int val); //pos 表示第一个元素。例如 pos=2,表示第二个元素。但是下标是1
     21 bool del(pArray arr, int pos, int * val); // int * val保存删除的元素
     22 
     23 
     24 int main(){
     25 
     26     getchar();
     27     return 0;
     28 
     29 }
     30 
     31 bool is_full(pArray arr){
     32     return arr->cnt == arr->len;
     33 }
     34 
     35 bool is_empty(pArray arr){
     36     return arr->cnt == 0;
     37 }
     38 
     39 
     40 
     41 bool init_array(pArray arr, int len){
     42     if (len <= 0) {
     43         printf("len is too small");
     44         return false;
     45     }
     46 
     47     arr->pBase = (int*)malloc(sizeof(int)*len);
     48     if (NULL == arr->pBase){
     49         printf("init array is fail");
     50         return false;
     51     }
     52     else{
     53         arr->cnt = 0;
     54         arr->len = len;
     55         return true;
     56     }
     57 
     58 
     59 }
     60 
     61 bool append(pArray arr, int val){
     62     if (is_full(arr)){
     63         return false;
     64     }
     65     arr->pBase[arr->cnt] = val;
     66     arr->cnt++;
     67     return true;
     68 }
     69 
     70 
     71 void sort(pArray arr){
     72     for (int i = 0; i < arr->cnt; i++) {
     73         for (int j = 0; j < arr->cnt - 1 - i; j++) {
     74             if (arr->pBase[j] > arr->pBase[j + 1]) {
     75                 int temp = arr->pBase[j];
     76                 arr->pBase[j] = arr->pBase[j + 1];
     77                 arr->pBase[j + 1] = temp;
     78             }
     79         }
     80     }
     81 }
     82 
     83 
     84 void show_array(pArray arr){
     85 
     86     if (is_empty(arr)){
     87         printf("array is empty");
     88     }
     89     else{
     90         for (int i = 0; i < arr->cnt; i++) {
     91             printf("%d ", arr->pBase[i]);
     92         }
     93     }
     94 
     95 }
     96 
     97 void reversal(pArray arr){
     98     int i = 0;
     99     int j = arr->cnt - 1;
    100     while (i < j){
    101         int temp = arr->pBase[i];
    102         arr->pBase[i] = arr->pBase[j];
    103         arr->pBase[j] = temp;
    104         i++;
    105         j--;
    106     }
    107 }
    108 
    109 
    110 bool insert(pArray arr, int pos, int val){
    111     if (is_full(arr)){
    112         printf("array is full");
    113         return false;
    114     }
    115 
    116     if (pos<0 || pos>arr->cnt + 1){
    117         return false;
    118     }
    119 
    120     for (int i = arr->cnt - 1; i >= pos - 1; i--) {
    121         arr->pBase[i + 1] = arr->pBase[i];
    122     }
    123     arr->pBase[pos - 1] = val;
    124     arr->cnt++;
    125     return true;
    126 }
    127 
    128 
    129 bool del(pArray arr, int pos, int * val){
    130     if (is_empty(arr)){
    131         printf("array is empty");
    132         return false;
    133     }
    134 
    135     if (pos<0 || pos>arr->cnt){
    136         return false;
    137     }
    138 
    139     *val = arr->pBase[pos - 1];
    140 
    141     for (int i = pos; i < arr->cnt; i++){
    142         arr->pBase[i - 1] = arr->pBase[i];
    143     }
    144     arr->cnt--;
    145     return true;
    146 
    147 }
  • 相关阅读:
    我和小美的撸码日记(3)之一句话搞定MVC表单页数据绑定与提交
    我和小美的撸码日记--基于MVC+Jqgrid的.Net快速开发框架
    我和小美的撸码日记(2)之第一个基于MVC+Jqgrid的列表页面
    我和小美的撸码日记(1)之软件也需靠脸吃饭,带您做张明星脸(附后台经典框架 DEMO 下载)
    Mysql 下DELETE操作表别名问题
    DynaActionForm(动态ActionForm)的使用
    structs中通过LabelValueBean构建下拉列表
    JavaScript中==和===区别
    JAVA包装类的缓存范围
    JAVA循环迭代中删除或添加集合数据报java.util.ConcurrentModificationException错误
  • 原文地址:https://www.cnblogs.com/or2-/p/4482819.html
Copyright © 2020-2023  润新知