数据结构-链表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);
#endif

DynamicArray.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
请按任意键继续. . .
*/

运行结果截图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全网都在用的超全【面试刷题小程序】,最新版激活教程

前几天&#xff0c;我的一个粉丝留言给我说&#xff0c;他在面试美团的自动化测试岗的时候&#xff0c;不幸挂掉了。越想越觉得可惜&#xff0c;回想面试经过&#xff0c;好好总结了几个点&#xff0c;发现面试没过的主要原因是在几个关键的问题没有给到面试官想要的答案。从而…

数据结构-链表2-链式存储

LinkList.h #ifndef LINKLIST_H #define LINKLIST_H #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h>//链表结点 typedef struct LINKNODE {void* data; //无类型指针&#xff0c;指向任何类型的数据struct LIN…

字节内部自动化测试培训资料,明年涨薪用得上

今天是12月27日&#xff0c;2021年还剩下最后4天。昨晚我收到一位粉丝朋友的涨薪喜讯&#xff0c;他踩着2021的尾巴&#xff0c;成功跳进广州海珠的互联网巨头&#xff0c;涨薪幅度达284%。其实每年的年末&#xff0c;圈子里的朋友都特别忙&#xff0c;大家都在为来年跳槽做准备…

数据结构-链表3-循环链表

LinkList.h #ifndef LINKLIST_H #define LINKLIST_H #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h>//链表小结点 typedef struct CIRCLELINKNODE {struct LinkNode *next; }CircleLinkNode;//链表结构体 type…

探索篇 | 接口字段容错测试(三)

往期关联文章&#xff1a;探索测试 | 新奇深层测试策略之案例剖析&#xff08;一&#xff09;探索篇 | 新奇测试策略剖析&#xff0c;大家都觉得多此一举(二)探索篇|越权测试策略之案例剖析&#xff08;一&#xff09;重磅福利 | 全网唯一,多年踩坑经验&#xff0c;探索测试策略…

数据结构-链表4-企业链表

LinkList.h #ifndef LINKLIST_H #define LINKLIST_H#include<stdio.h> #include<stdlib.h> //链表结点 typedef struct LINKNODE {struct LINKNODE *next; }LinkNode;//链表 typedef struct LINKLIST{LinkNode head; //放在第一个&#xff0c;防止有偏移量.//不…

全网都在看的Jmeter精选原创文章

点击上方“蓝字”&#xff0c;轻松关注我们Jmeter 原创合集‍‍‍‍‍‍‍1、【Jmeter篇】Linux环境下安装部署运行Jmeter2、Jmeter跨线程组传递参数3、Jmeter中JDBC Connection Configuration实现MySQL JDBC Request数据库处理4、Jmeter JDBC Request执行多条SQL语句5、Jmeter…

opencv之namedWindow,imshow出现两个窗口

初学opencv&#xff0c;代码如下&#xff0c;按理来说结果应该是&#xff1a;一个cmd命令行窗口&#xff0c;一个显示照片的窗口 #include<opencv2\opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main() {const char* win_name …

全网都在看的Fiddler、mitmproxy抓包秘籍,花钱都买不到

点击上方“蓝字”&#xff0c;轻松关注我们Fiddler、mitmproxy、Stream抓包工具原创集合1、Fiddler抓取APP请求&#xff08;环境搭建&#xff09;之mama再也不用担心抓不到包了2、Fiddler抓包神器带你遨游网络&#xff0c;叱咤风云&#xff0c;为所欲为3、Fiddler抓包 | 竟然有…

无法打开文件“python35_d.lib”

在windows10安装opencv时&#xff0c;执行cmake之后&#xff0c;用vs2015打开工程&#xff0c;在debug下&#xff0c;生成INSTALL会出现 错误 1 error LNK1104: 无法打开文件“python35_d.lib” 。 转自 http://blog.csdn.net/Chris_zhangrx/article/details/78947526 在用…

缺陷定位 | 如何精准效率分析推测BUG定位(二)

点击上方“蓝字”&#xff0c;轻松关注我们明天就是除夕了&#xff0c;很多人都回到了老家&#xff0c;吃上了妈妈做的饭菜&#xff0c;这时候应该是最幸福的时刻&#xff0c;我也用年前上班仅剩的几小时把 缺陷定位&#xff08;二&#xff09;分享给大家&#xff0c;希望大家能…

VS2015+cmake3.8+opencv3.2+opencv-contrib3.2编译及配置步骤

一、下载以下文件并解压和安装cmake。并在同目录下新建文件夹mybuild 文件1 opencv-3.2.0-vc14.exe 文件2 opencv_contrib-3.2.0.zip 文件3 cmake-3.8.0-win64-x64.msi 二、打开cmake&#xff0c;并填写路径 .cmake第一行输入的是opencv的源码即opencv的source文件&…

缺陷定位 | 分析推理定位BUG案例(三)

往期关联文章&#xff1a;缺陷定位 | 测试发现了Bug&#xff0c;还要分析定位Bug&#xff1f;&#xff08;一&#xff09;缺陷定位 | 如何精准效率分析推测BUG定位&#xff08;二&#xff09;运营反馈&#xff0c;生产环境&#xff0c;WEB端管理后台&#xff0c;岗位审核详情&a…

数据结构-栈1-顺序存储

LinkList.h: #include<stdlib.h> #include<stdio.h> #include<string.h> #define MAX_SIZE 1024 #define TRUE 1 #define FALSE 0typedef struct LINKLIST {void* data[MAX_SIZE];int size;}LinkList;//初始化 LinkList* Init_linkList();//压入元素 void Pu…

构建测试的体系化思维(基础篇)

读完需要22分钟速读仅需 8 分钟之前写过一篇文章《神圣的QA》&#xff0c;是面向想从事 QA 工作的毕业生同学的&#xff0c;文中有讲到 QA 的五个基本职责&#xff1a;理解和澄清业务需求制定策略并设计测试实现和执行测试缺陷管理与分析质量反馈与风险识别最近有朋友希望我能分…

数据结构-栈2-链式存储

LinkList.h #include<stdlib.h> #include<stdio.h> #include<string.h> #define MAX_SIZE 1024 #define TRUE 1 #define FALSE 0//链表结点--存储下一个结点指针 typedef struct LINKNODE {struct LINKNODE *next; }LinkNode;//链表--保存头结点,和链表长度…

构建测试的体系化思维(进阶篇)

读完需要24分钟速读仅需 8 分钟00 引言1. 三个层次聊测试体系测试人员缺乏体系化思维&#xff1f;新建产品团队或者新启项目&#xff0c;如何搭建质量保障体系&#xff1f;大家都接触过不计其数的测试、质量方面的文章或者培训课程&#xff0c;内容不乏测试实践、技术相关&…

opencv源码查看

首先看看cmake后的mybuild文件夹&#xff1a; 一、打开opencv.sln文件。然后找到对应的cpp文件。

2022大厂面试必问要点总结

Hi&#xff0c;大家好&#xff0c;又到了一年一度的“金三银四”&#xff0c;圈子里的朋友都在为跳槽做准备&#xff0c;每个人都想抓住机会跳槽大厂涨薪升职。近段时间来咨询面试、进阶、跳槽问题的朋友也越来越多。↑后台留言仅最近三天&#xff0c;就收到近百条关于进阶和面…

loadRunner安装及使用步骤

一、下载 loadRunner软件下载地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1c1NBU5CR8n0MP6pttwYXlA 提取码&#xff1a;eent HP_LoadRunner_12.02_Community_Edition_Additional_Components_T7177-15060 社区版的附加组件 HP_LoadRunner_12.02_Community_Edi…