seqlist.h --------------------------------------------------------------------------------- #ifndef __MY_SEQLIST_H__ #define __MY_SEQLIST_H__ //顺序存储链表 //动态数组案例: typedef struct MyArray{ int* ArrayAddr; //数据首地址 int capacity; //数据容量 int length; //数据长度 }MyArray; //初始化数组 MyArray* Init_MyArray(); //判断数组是否为空 0:false 不为空 1:true 为空 int IsEmpty_MyArray(MyArray* array); //清空数组 int Clear_MyArray(MyArray* array); //获得指定位置元素 int GetElement_MyArray(MyArray* array,int pos); //向指定位置插入元素 int InsertElement_MyArray(MyArray* array, int pos,int val); //删除指定位置元素 int RemoevElement_MyArray(MyArray* array, int pos); //获得链表长度 int GetLength_MyArray(MyArray* array); //获得链表容量 int GetCapacity_MyArray(MyArray* array); //销毁数组 int DestroyArray_MyArray(MyArray* array); //打印数组内容 void PrintArray_MyArray(MyArray* array); #endif //__MY_SEQLIST_H__ =========================================================================== seqlist.c --------------------------------------------------------------------------- #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #define MYARRAY_TRUE 1 #define MYARRAY_FALSE 0 //定义结构体 保存数据首地址和数组长度 typedef struct MyArray{ int* ArrayAddr; //数据首地址 int capacity; //数据容量 int length; //数据长度 }MyArray; //初始化数组 MyArray* Init_MyArray() { MyArray* array = (MyArray*)malloc(sizeof(MyArray)); array->ArrayAddr = (int *)malloc(sizeof(int) * 20); if(array->ArrayAddr == NULL) { printf("apply mem failed!"); return NULL; } memset(array->ArrayAddr, 0, sizeof(int)*20); array->length = 0; array->capacity = 20; return array; } //判断数组是否为空 0:false 不为空 1:true 为空 int IsEmpty_MyArray(MyArray* array) { if(array == NULL) { return -1; } if(array->length == 0) { return 1; } return 0; } //清空数组 int Clear_MyArray(MyArray* array) { if(array == NULL) { return -1; } if(array->ArrayAddr != NULL) { memset(array->ArrayAddr, 0, array->capacity*(sizeof(int))); } array->length = 0; return 0; } //获得指定位置元素 int GetElement_MyArray(MyArray* array,int pos) { if(array == NULL) { return -1; } if(pos > array->length -1) { printf("pos is out of the length of array"); return -3; } return array->ArrayAddr[pos]; } //向指定位置插入元素 int InsertElement_MyArray(MyArray* array, int pos,int val) { int i; if(array == NULL) { return -1; } if(pos > array->capacity) { printf("pos is out of array capacity:err: %d", pos); return -2; } if(pos > array->length ) { pos = array->length ; } if(array->length == array->capacity) { int *newSpace = (int*)malloc(2*array->capacity * sizeof(int)); memset(newSpace, 0, 2*array->capacity * sizeof(int)); memcpy(newSpace, array->ArrayAddr, array->length * sizeof(int)); if(NULL != array->ArrayAddr) { free(array->ArrayAddr); } array->ArrayAddr = newSpace; array->capacity = array->capacity*2; } for(i = array->length-1; i >= pos; i--) { array->ArrayAddr[i+1] = array->ArrayAddr[i]; } array->ArrayAddr[pos] = val; array->length++; return 0; } //删除指定位置元素 int RemoevElement_MyArray(MyArray* array, int pos) { int i; if(array == NULL) { return -1; } if(pos > array->length) { printf("pos is out of array length, err: %d", pos); return -2; } for(i=pos; i<array->length-1; i++) { array->ArrayAddr[i] = array->ArrayAddr[i+1]; } array->length--; return 0; } //获得链表长度 int GetLength_MyArray(MyArray* array) { if(array == NULL) { return -1; } return array->length; } //获得链表容量 int GetCapacity_MyArray(MyArray* array) { if(array == NULL) { return -1; } return array->capacity; } //销毁数组 int DestroyArray_MyArray(MyArray* array) { if(array == NULL) { return -1; } if(NULL != array->ArrayAddr) { free(array->ArrayAddr); array->ArrayAddr = NULL; } array->capacity = 0; array->length = 0; free(array); return 0; } //打印数组内容 void PrintArray_MyArray(MyArray* array){ int i; for(i = 0; i < array->length;i++) { printf("%d ",array->ArrayAddr[i]); } printf("\n"); } ============================================================================= seqlist_test ----------------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #include "seqlist.h" //测试API void test() { int i =0 ; MyArray *array = Init_MyArray();//初始化数组 //打印数组的长度和容量 printf("数组的初始化容量:%d, 数组的初始化长度:%d", GetLength_MyArray(array), GetCapacity_MyArray(array)); //循环向数组中插入元素 for(i=0; i<10; i++) { InsertElement_MyArray(array, i, i); } printf("数组插入元素长度:%d ,容量:%d\n", GetLength_MyArray(array), GetCapacity_MyArray(array)); //打印数组 PrintArray_MyArray(array); InsertElement_MyArray(array, 5, 100); printf("数组插入元素长度:%d ,容量:%d\n", GetLength_MyArray(array), GetCapacity_MyArray(array)); //打印数组 PrintArray_MyArray(array); //删除位置 5 的元素 RemoevElement_MyArray(array,5); //打印数组 PrintArray_MyArray(array); printf("数组插入元素长度:%d ,容量:%d\n", GetLength_MyArray(array), GetCapacity_MyArray(array)); //销毁数组 DestroyArray_MyArray(array); } int main(){ //test01(); test(); return 0; } |
|
来自: 白云cjl > 《arithmetic》