数据结构-链表1-顺序存储
生活随笔
收集整理的這篇文章主要介紹了
数据结构-链表1-顺序存储
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
DynamicArray.h
#ifndef DYNAMIC_ARRAY_H #define DYNAMIC_ARRAY_H #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h>//動態數組結構體 typedef struct DYNAMICARRAY {int* pAddr; //具體存放數據的地址int size; //當前有多少個元素int capacity; //數組容量(當前最大的容量)} Dynamic_Array;typedef struct LINKNODE {void * data;}linkNode; //寫一系列對DYNAMICARRAY結構體操作的函數 //初始化 Dynamic_Array * Init_Array();//插入(默認尾部插入) void Push_Back_Array(Dynamic_Array *arr,int value);//根據位置刪除 void RemoveByPOs_Array(Dynamic_Array *arr, int pos); //根據值刪除 void RemoveByValue_Array(Dynamic_Array *arr, int value);//查找 int Find_Array(Dynamic_Array *arr, int value);//打印 void Print_Array(Dynamic_Array *arr);//釋放動態數組的內存 void FreeSpace_Array(Dynamic_Array *arr);//清空數組 void clear_Array(Dynamic_Array *arr);//獲得動態數據容量 int Capacity_Array(Dynamic_Array *arr);//獲得動態數組當前元素個數 int Size_Array(Dynamic_Array *arr);//根據位置獲得某個位置元素 int At_Array(Dynamic_Array *arr, int pos); #endifDynamicArray.c
#include"DynamicArray.h" //動態數組初始化 Dynamic_Array * Init_Array() {//給結構體分配內存Dynamic_Array *myArray = (Dynamic_Array *)malloc(sizeof(Dynamic_Array));//初始化myArray->size = 0;myArray->capacity = 20;//myArray->pAddr = (int *)malloc(sizeof(int *));我的理解myArray->pAddr = (int *)malloc(sizeof(int)*myArray->capacity);return myArray; }//插入(默認尾部插入) void Push_Back_Array(Dynamic_Array *arr, int value) {if (arr == NULL){return;}//判斷空間是否足夠if (arr->size == arr->capacity){//第一步:申請一塊更大空間 新空間是舊空間的二倍int *newSpace = (int *)malloc(sizeof(int)*arr->capacity * 2);//第二步:拷貝數據到新空間memcpy(newSpace, arr->pAddr, arr->capacity*sizeof(int));//第三歩:釋放舊空間free(arr->pAddr);//更新容量arr->capacity = arr->capacity * 2;arr->pAddr = newSpace;}//插入新元素arr->pAddr[arr->size] = value; //默認插入到尾端arr->size++; }//根據位置刪除 void RemoveByPOs_Array(Dynamic_Array *arr, int pos) {if (arr == NULL){return;}if (pos<0 || pos>arr->size){arr->size = pos;}//刪除元素//將刪除元素后面的元素直接往前一個覆蓋。最后size--for (int i = pos; i < arr->size-1; i++) //防止最后一個無覆蓋,減1{arr->pAddr[i] = arr->pAddr[i + 1];}arr->size--; } //根據值刪除value第一次出現的位置 void RemoveByValue_Array(Dynamic_Array *arr, int value) {if (arr == NULL){return;}//找到值的位置int pos = Find_Array(arr, value);//根據位置刪除RemoveByPOs_Array(arr, pos); }//查找 int Find_Array(Dynamic_Array *arr, int value) {if (arr == NULL){return -1;}//找到值的位置int pos = -1;for (int i = 0; i < arr->size; i++){if (arr->pAddr[i] == value){pos = i;break;}}return pos; }//打印 void Print_Array(Dynamic_Array *arr) {if (arr == NULL){return;}for (int i = 0; i < arr->size; i++){printf("%d ", arr->pAddr[i]);}printf("\n"); }//釋放動態數組的內存 void FreeSpace_Array(Dynamic_Array *arr) {if (arr == NULL){return;}if (arr->pAddr != NULL){free(arr->pAddr);}free(arr); }//清空數組 void clear_Array(Dynamic_Array *arr) {if (arr == NULL){return;}//pAddr->空間arr->size = 0; } //獲得動態數據容量 int Capacity_Array(Dynamic_Array *arr) {if (arr == NULL){return -1;}return arr->capacity; }//獲得動態數組當前元素個數 int Size_Array(Dynamic_Array *arr) {if (arr == NULL){return -1;}return arr->size; }//根據位置獲得某個位置元素 int At_Array(Dynamic_Array *arr, int pos) {return arr->pAddr[pos]; }動態數組.c
#define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h> #include"DynamicArray.h" void test01() {//初始化動態數組Dynamic_Array* myArray = Init_Array();//打印容量printf("數組容量:%d\n", Capacity_Array(myArray));printf("數組大小:%d\n", Size_Array(myArray));//插入元素for (int i = 0; i < 30; i++){Push_Back_Array(myArray, i);}//打印容量printf("數組容量:%d\n", Capacity_Array(myArray));printf("數組大小:%d\n", Size_Array(myArray));//刪除RemoveByPOs_Array(myArray, 0);RemoveByValue_Array(myArray, 27);//打印Print_Array(myArray);//查找int pos=Find_Array(myArray, 5);printf("5查找到:pos:%d %d\n", pos, At_Array(myArray, pos));//銷毀FreeSpace_Array(myArray); } int main() {test01();system("pause");return 0; }/運行結果 /* 數組容量:20 數組大小:0 數組容量:40 數組大小:30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 29 5查找到:pos:4 5 請按任意鍵繼續. . . */運行結果截圖:
總結
以上是生活随笔為你收集整理的数据结构-链表1-顺序存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 四种存储引擎
- 下一篇: python数据处理和数据分析的区别_p