1. 程式人生 > >用C語言寫一個數組,實現類似JAVA語言中ArrayList的功能

用C語言寫一個數組,實現類似JAVA語言中ArrayList的功能

此程式是在看過郝斌老師的資料結構與演算法的視訊後,自己用C語言實現的。整個程式比較簡單,適合入門資料結構時練手。

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define true 1
#define false 0
typedef int bool;

struct Array
{
    int *arrBase;
    int maxlen; //最大長度
    int len;    //當前有效長度
};
// 函式宣告
void create_arr(struct Array *arr,int maxlen);// 構造一個list
bool append_arr(struct Array *arr,int value);  // 向list最後一個位置新增元素
bool insert_arr(struct Array *arr,int pos,int value);//在第pos個位置上插入一個元素
bool delete_arr();
bool isEmpty(struct Array *arr);
bool isFull(struct Array *arr);
void show_arr(struct Array *arr);
void inverse_arr(struct Array *arr);
void sort_arr(struct Array *arr);

void create_arr(struct Array *arr,int maxlen)
{
    arr->arrBase = (int *)malloc(sizeof(int)*maxlen);
    arr->len=0;
    arr->maxlen=maxlen;

}
bool append_arr(struct Array *arr,int value)
{
    if(isFull(arr))
    {
        printf("陣列已滿,無法插入\n");
        return false;
    }
    else{
          arr->arrBase[arr->len]=value;
          arr->len++;
    }
}
bool isFull(struct Array *arr)
{
    if(arr->len==arr->maxlen)
    {
        return true;
    }else{
        return false;
    }

}
bool isEmpty(struct Array *arr)
{
    if(0 == arr->len){
        return true;
    }
    else{
        return false;
    }
}
bool insert_arr(struct Array *arr,int pos,int value)
{
    int i;
    if( pos<1 || pos > arr->len+1 || isFull(arr))
    {
        printf("插入位置不正確或者資料已滿,無法插入");
        return false;
    }
    for(i=arr->len;i>=pos;i--)
    {
        arr->arrBase[i]=arr->arrBase[i-1];
    }
    arr->arrBase[pos-1]=value;
    arr->len++;
}
void show_arr(struct Array *arr)
{
    int i;
    for(i=0;i<arr->len;i++)
    {
        printf("%d ",arr->arrBase[i]);
    }
    printf("\n");
}
void inverse_arr(struct Array *arr)
{
    int i=0,j=arr->len-1;
    int temp = 0;
    while(i<j)
    {
        temp = arr->arrBase[i];
        arr->arrBase[i] = arr->arrBase[j];
        arr->arrBase[j] = temp;
        i++;
        j--;
    }
}
void sort_arr(struct Array *arr)
{
    int i,j,temp;
    for(i=0;i<arr->len;i++)
    {
        for(j=0;j<arr->len-i-1;j++)
        {
            if(arr->arrBase[j]>arr->arrBase[j+1])
            {
                 temp = arr->arrBase[j];
                 arr->arrBase[j] = arr->arrBase[j+1];
                 arr->arrBase[j+1] = temp;
            }
        }
    }
}
int main()
{
    struct Array arr;
    int maxlen = 5;
    create_arr(&arr,maxlen);
    append_arr(&arr,1);
    append_arr(&arr,2);
    append_arr(&arr,3);
    printf("-------------插入前的陣列元素值:---------------\n");
    show_arr(&arr);
    insert_arr(&arr,2,4);
    printf("-------------插入後的陣列元素值:---------------\n");
    show_arr(&arr);
    inverse_arr(&arr);
    printf("------------- 倒序後的陣列元素值:---------------\n");
    show_arr(&arr);
    sort_arr(&arr);
    printf("------------- 排序後的陣列元素值:---------------\n");
    show_arr(&arr);
    return 0;
}