用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("数组已满,无法插入 "); 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(" "); } 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("-------------插入前的数组元素值:--------------- "); show_arr(&arr); insert_arr(&arr,2,4); printf("-------------插入后的数组元素值:--------------- "); show_arr(&arr); inverse_arr(&arr); printf("------------- 倒序后的数组元素值:--------------- "); show_arr(&arr); sort_arr(&arr); printf("------------- 排序后的数组元素值:--------------- "); show_arr(&arr); return 0; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。