欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

用C语言写一个数组,实现类似JAVA语言中ArrayList的功能,javaarraylist

来源: javaer 分享于  点击 48737 次 点评:97

用C语言写一个数组,实现类似JAVA语言中ArrayList的功能,javaarraylist


此程序是在看过郝斌老师的数据结构与算法的视频后,自己用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;
}


相关文章

    暂无相关文章

用户点评