Ver código fonte

minor update

david ullua 2 anos atrás
pai
commit
71ea68e043

+ 0 - 18
struct/arraylist_usage.c

@@ -1,18 +0,0 @@
-#include "arraylist.h"
-
-int main(int argc, char** argv) {
-    List *a = initializeWithCapacity(3);
-    printf("\t len = %d capacity = %d \n", len(a), cap(a));
-    
-    append(a, 5);
-    append(a, 4);
-    append(a, 15);
-    append(a, 9);
-    append(a, 19);
-    
-    printf("\t a[3] = %d \n", get(a, 3));
-    set(a, 3, 8);
-    printf("\t a[3] = %d after changed \n", get(a, 3));
-
-    printf("\t len = %d capacity = %d \n", len(a), cap(a));
-}

+ 28 - 29
struct/arraylist.h → structure/arraylist.h

@@ -20,7 +20,6 @@ typedef struct {
 
 typedef List* ListPtr;
 
-
 ListPtr initializeWithCapacity(int capacity) {
     ListPtr a = malloc(sizeof *a);
     a->capacity = capacity;
@@ -29,6 +28,23 @@ ListPtr initializeWithCapacity(int capacity) {
     return a;
 }
 
+bool ensureCapacity(ListPtr a, int minCapacity) {
+    if(minCapacity > a->capacity) {
+        a->capacity = a->capacity << 1; // 增长两倍容量
+        if(a->capacity < minCapacity)
+            a->capacity = minCapacity;
+        // 按照新的容量空间,重新分配内存(保留原有数据)
+        a->arr = realloc(a->arr, a->capacity * sizeof(int));
+    }
+    return true;
+}
+
+bool append(ListPtr a, int n) {
+    ensureCapacity(a, a->size + 1); //确保容量不小于 数据量 + 1
+    a->arr[a->size++] = n;
+    return true;
+}
+
 int get(ListPtr a, int index) {
     if(index < 0)
         index = a->size + index;
@@ -50,23 +66,20 @@ bool set(ListPtr a, int index, int value) {
     return true;
 }
 
-bool ensureCapacity(ListPtr a, int minCapacity) {
-    if(minCapacity > a->capacity) {
-        a->capacity += (a->capacity >> 1);
-        if(a->capacity < minCapacity)
-            a->capacity = minCapacity;
-        a->arr = realloc(a->arr, a->capacity * sizeof *(a->arr));
-    }
-    return true;
-}
-
-bool append(ListPtr a, int n) {
-    ensureCapacity(a, a->size + 1);
-    a->arr[a->size++] = n;
+bool pop(ListPtr a, int index) {
+    if(index < 0)
+        index = a->size + index;
+    
+    if(index >= a->size || index < 0)
+        return false;
+    
+    for(int i = index; i < a->size-1; i++)
+        a->arr[i] = a->arr[i+1];
+    a->size--;
+    
     return true;
 }
 
-
 bool clear(ListPtr a) {
     free(a->arr);
     a->arr = malloc(0);
@@ -241,20 +254,6 @@ bool isEqual(ListPtr a, ListPtr b) {
     return true;
 }
 
-bool pop(ListPtr a, int index) {
-    if(index < 0)
-        index = a->size + index;
-    
-    if(index >= a->size || index < 0)
-        return false;
-    
-    for(int i = index; i < a->size-1; i++)
-        a->arr[i] = a->arr[i+1];
-    a->size--;
-    
-    return true;
-}
-
 bool delete(ListPtr a, int value) {
     int index = indexOf(a, value);
     if(index == -1)

+ 0 - 0
struct/arraylist_demo.c → structure/arraylist_demo.c


+ 22 - 0
structure/arraylist_usage.c

@@ -0,0 +1,22 @@
+#include "arraylist.h"
+
+int main(int argc, char** argv) {
+    List *a; // 先声明
+    a = initializeWithCapacity(3); // 后初始化
+
+    // 声明的同时初始化
+    List *b = initializeWithCapacity(5); 
+
+    printf("\t Init len = %d capacity = %d \n", len(a), cap(a));
+    
+    append(a, 5);
+    append(a, 4);
+    append(a, 15);
+    append(a, 9);
+    append(a, 19);
+    
+    printf("\t New len = %d capacity = %d \n", len(a), cap(a));
+    printf("\t a[3] = %d \n", get(a, 3));
+    set(a, 3, 8);
+    printf("\t a[3] = %d after changed \n", get(a, 3));
+}