資料結構之C語言模擬整數陣列實現

c3tc3tc3t發表於2015-05-06
  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 }

 

相關文章