seqlist.h --------------------------------------------------------------------------------- #ifndef __MY_SEQLIST_H__ #define __MY_SEQLIST_H__ //順序存儲鏈表 //動態(tài)數(shù)組案例: typedef struct MyArray{ int* ArrayAddr; //數(shù)據(jù)首地址 int capacity; //數(shù)據(jù)容量 int length; //數(shù)據(jù)長度 }MyArray; //初始化數(shù)組 MyArray* Init_MyArray(); //判斷數(shù)組是否為空 0:false 不為空 1:true 為空 int IsEmpty_MyArray(MyArray* array); //清空數(shù)組 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); //銷毀數(shù)組 int DestroyArray_MyArray(MyArray* array); //打印數(shù)組內(nèi)容 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 //定義結(jié)構(gòu)體 保存數(shù)據(jù)首地址和數(shù)組長度 typedef struct MyArray{ int* ArrayAddr; //數(shù)據(jù)首地址 int capacity; //數(shù)據(jù)容量 int length; //數(shù)據(jù)長度 }MyArray; //初始化數(shù)組 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; } //判斷數(shù)組是否為空 0:false 不為空 1:true 為空 int IsEmpty_MyArray(MyArray* array) { if(array == NULL) { return -1; } if(array->length == 0) { return 1; } return 0; } //清空數(shù)組 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; } //銷毀數(shù)組 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; } //打印數(shù)組內(nèi)容 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();//初始化數(shù)組 //打印數(shù)組的長度和容量 printf("數(shù)組的初始化容量:%d, 數(shù)組的初始化長度:%d", GetLength_MyArray(array), GetCapacity_MyArray(array)); //循環(huán)向數(shù)組中插入元素 for(i=0; i<10; i++) { InsertElement_MyArray(array, i, i); } printf("數(shù)組插入元素長度:%d ,容量:%d\n", GetLength_MyArray(array), GetCapacity_MyArray(array)); //打印數(shù)組 PrintArray_MyArray(array); InsertElement_MyArray(array, 5, 100); printf("數(shù)組插入元素長度:%d ,容量:%d\n", GetLength_MyArray(array), GetCapacity_MyArray(array)); //打印數(shù)組 PrintArray_MyArray(array); //刪除位置 5 的元素 RemoevElement_MyArray(array,5); //打印數(shù)組 PrintArray_MyArray(array); printf("數(shù)組插入元素長度:%d ,容量:%d\n", GetLength_MyArray(array), GetCapacity_MyArray(array)); //銷毀數(shù)組 DestroyArray_MyArray(array); } int main(){ //test01(); test(); return 0; } |
|