数据结构--数组

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 struct Arr
  5 {
  6     int * pBase;//存储的是数组的第一个元素的 地址
  7     int len;//数组所能容纳的最大元素的个数
  8     int cnt; //当前数组有效元素的个数
  9     //int increment; //自动增长因子
 10 };
 11 void init_arr( struct Arr * pArr, int length);
 12 bool append_arr(struct Arr *pArr, int val);//追加
 13 bool insert_arr(struct Arr *pArr, int pos , int val);
 14 bool delete_arr(struct Arr *pArr, int pos , int *pVal);
 15 int get();
 16 bool is_empty(struct Arr*);
 17 bool is_full(struct Arr*);
 18 void sort_arr();
 19 void show_arr(struct Arr*);
 20 void inversion_arr(struct Arr *pArr);
 21 
 22 
 23 int main(void)
 24 {
 25     struct Arr arr;
 26     int val;
 27 
 28     init_arr(&arr,6);
 29     
 30     append_arr(&arr,1);
 31     append_arr(&arr,2);
 32     append_arr(&arr,3);
 33     append_arr(&arr,4);
 34     append_arr(&arr,5);
 35     insert_arr(&arr,1,99);
 36 
 37     if(delete_arr(&arr,1,&val))
 38     {
 39         printf("删除成功!
");
 40         printf("您删除的元素是:%d
",val);
 41     }
 42     else
 43     {
 44         printf("删除失败!
");
 45     }
 46     show_arr(&arr);
 47     sort_arr(&arr);  //选择排序
 48 
 49 
 50 
 51 
 52     return 0;
 53 }
 54 void init_arr(struct Arr *pArr,int length)
 55 {
 56     pArr->pBase =(int *)malloc(sizeof(struct Arr)*length);//申请length个连续空间 来存放array的所有地址
 57     if(NULL ==pArr->pBase)
 58     {
 59       printf("动态内存分配失败
");
 60       exit(-1); //终止整个程序
 61     }
 62     else
 63     {
 64         pArr->len = length;
 65         pArr->cnt = 0;
 66     }
 67     return;
 68 }
 69 void show_arr(struct Arr *pArr)
 70 {
 71     if(is_empty(pArr))
 72     {
 73         printf("数组为空!
");
 74     }
 75     else
 76     {
 77         for(int i = 0; i<pArr->cnt;i++)
 78         {
 79              printf("arr[%d] =%d ",i, pArr->pBase[i]);//或者   *((pArr->pBase)+i) 
 80              printf("
");
 81         }
 82     }
 83 }
 84 bool is_empty(struct Arr *pArr)
 85 {
 86     return (pArr->cnt)? 0:1;
 87 }
 88 
 89 bool is_full(struct Arr* pArr)
 90 {
 91     return (pArr->cnt ==  pArr->len)? 1:0;
 92 }
 93 bool append_arr(struct Arr *pArr, int val)
 94 {
 95     if(is_full(pArr))
 96     {
 97         return false;
 98     }
 99     else
100     {
101         pArr->pBase[pArr->cnt]=val;   //*(pArr->pBase +pArr->cnt) = val;
102         pArr->cnt ++;
103         return true;
104     }
105 }
106 bool insert_arr(struct Arr *pArr, int pos , int val)
107 {
108     if(is_full(pArr))
109     return false;
110     if(pos<1 ||pos>pArr->cnt+1)
111     return  false;
112     else
113     {
114         int i;
115         for(i = pArr->cnt-1 ;i>=pos-1;--i) 
116         {
117             pArr ->pBase[i+1] = pArr->pBase[i];
118         }
119         pArr->pBase[pos-1] = val;
120         pArr->cnt++;
121         return true;
122     }
123 }
124 bool delete_arr(struct Arr *pArr, int pos ,int *pVal)
125 {
126 
127     int i;
128     if(is_empty(pArr))
129         return false;
130     if(pos<1||pos > pArr->cnt)
131         return false;
132     *pVal = pArr->pBase[pos-1];
133     for(i = pos ; i<pArr->cnt ;++i)
134     {
135         pArr->pBase[i-1] = pArr->pBase[i]; 
136     }
137     return true;
138 }
139 void inversion_arr(struct Arr *pArr)
140 {
141     int i=0;
142     int j = pArr->cnt-1;
143     int t;
144     while(i<j)
145     {
146         t = pArr->pBase[i];
147         pArr->pBase[i] = pArr->pBase[j];
148         pArr->pBase[j]=t;
149         i++;
150         j--;
151     }
152 }
153 
154 
155 void sort_arr(struct Arr*pArr)
156 {
157     int i,j,t;
158     for(i = 0;i<pArr->cnt;++i)
159     {
160         for(j =i+1;j<pArr->cnt;++j)
161         {
162             if(pArr->pBase[i]>pArr->pBase[j])
163             {
164                 t = pArr->pBase[i];
165                 pArr->pBase[i] = pArr->pBase[j];
166                 pArr->pBase[j]=t;
167             }
168         }
169     }
170 }
原文地址:https://www.cnblogs.com/yuejian/p/12382494.html