用C語言寫一個數組,實現類似JAVA語言中ArrayList的功能
阿新 • • 發佈:2018-12-30
此程式是在看過郝斌老師的資料結構與演算法的視訊後,自己用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; }