青木瓜-学习篇-数据结构- c提高08day
先来讲述这一周学的吧(其实去掉上课时间和写作业时间其实加起来也不到一天内)。
数据结构:
什么是数据结构?为什么学数据结构?
在我的理解里,数据结构就是将对应的类型数据进行归类,整合,将繁琐的,乱杂的数据进行整合,实其根据有条理性,简化,便于程序工作者,进行相关项目的整合,与调用。也在在用户输入时将如链表(因为刚学,也只会举这个例子)中插入,添加元素下,使得在链表动态数组位置进行一系列变化。
/初始化数组
struct DynamicArray*Init_DynamicArray(int capacity)
{
if(capacity <= 0)
{
return NULL;
}
struct DynamicArray*arr = malloc(sizeof(struct DynamicArray));
if (NULL == arr)
{
return NULL;
}
arr->capacity = capacity;
arr->addr=malloc(sizeof(void*)*arr->capacity);
arr->size = 0;
return arr;
}
//插入元素
void Insert_DynamicArray(struct DynamicArray*arr, int pos, void*data)
{
if(NULL==arr)
{
return;
}
if (NULL == data)
{
return;
}
if (pos<0 || pos>arr->size)
{
pos = arr->size;
}
//判断空间是否足够
if (arr->size >= arr->capacity)
{
//1.申请一块更大的内存空间
int newcapacity = arr->capacity*2;
void **newspace = malloc(sizeof(void*)*newcapacity);
//2.将原来空间的数据拷贝到新空间
memcpy (newspace, arr->addr, sizeof(void*)*arr->capacity);
//3.释放原来空间的内存
free(arr->addr);
//4.更新addr指向
arr->addr = newspace;
arr->capacity = newcapacity;
}
//4.移动元素,将pos位置空出位置来
for (int i = arr->size - 1; i >= pos; --i)
{
arr->addr[i + 1] = arr->addr[i];
}
//将新元素插入到pos位置
arr->addr[pos] = data;
arr->size++;
}
如何很好的运用数据结构?
在这一方面我并不能很好的理解(还没真正搞清楚)现阶段我只能说,结合之前所学知识将其在合适的场合下进行。如存在有不同类型的数据,与在数据多且杂时。
#define _CRT_SECURE_NO_WAREINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//1.先把需要的数据信息结构定义下来
struct DynamicArray
{
//数组存储元素的空间的首地址
void **addr;
//存储数据的内存中最大能够容纳多少元素
int capacity;//容量
//当前存储数据的内存中有多少个元素
int size;//大小
};
//初始化数组
struct DynamicArray*Init_DynamicArray(int capacity)
{
if(capacity <= 0)
{
return NULL;
}
struct DynamicArray*arr = malloc(sizeof(struct DynamicArray));
if (NULL == arr)
{
return NULL;
}
arr->capacity = capacity;
arr->addr=malloc(sizeof(void*)*arr->capacity);
arr->size = 0;
return arr;
}
//插入元素
void Insert_DynamicArray(struct DynamicArray*arr, int pos, void*data)
{
if(NULL==arr)
{
return;
}
if (NULL == data)
{
return;
}
if (pos<0 || pos>arr->size)
{
pos = arr->size;
}
//判断空间是否足够
if (arr->size >= arr->capacity)
{
//1.申请一块更大的内存空间
int newcapacity = arr->capacity*2;
void **newspace = malloc(sizeof(void*)*newcapacity);
//2.将原来空间的数据拷贝到新空间
memcpy (newspace, arr->addr, sizeof(void*)*arr->capacity);
//3.释放原来空间的内存
free(arr->addr);
//4.更新addr指向
arr->addr = newspace;
arr->capacity = newcapacity;
}
//4.移动元素,将pos位置空出位置来
for (int i = arr->size - 1; i >= pos; --i)
{
arr->addr[i + 1] = arr->addr[i];
}
//将新元素插入到pos位置
arr->addr[pos] = data;
arr->size++;
}
//遍历
void Foreach_DynamicArray(struct DynamicArray*arr, void(*_callback)(void*))
{
if (NULL == arr)
{
return;
}
if (NULL == _callback)
{
return;
}
for (int i = 0; i<arr->size; ++i)
{
_callback(arr->addr[i]);
}
}
void RemoveBypos_DynamicArray(struct DynamicArray *arr,int pos);
void RemoveByValue_DynamicArray(struct DynamicArray *arr,void *data,int (*compare)(void*,void*));
void Destory_DynamicArray(struct DynamicArray *arr);
struct Person
{
char name[64];
int age;
};
void myPrint(void *data)
{
struct Person *person = (struct Person*)data;
printf("Name:%s Age:%d\n", person->name, person->age);
}
void test()
{
//创建 动态数组
struct DynamicArray*da = Init_DynamicArray(10);
//动态数组添加元素
struct Person p1 = { "aaa",10 };
struct Person p2 = { "bbb",20 };
struct Person p3 = { "ccc",30 };
struct Person p4 = { "ddd",40 };
struct Person p5 = { "eee",50 };
struct Person p6 = { "fff",60 };
Insert_DynamicArray(da, 0, &p1);
Insert_DynamicArray(da, 0, &p2);
Insert_DynamicArray(da, 0, &p3);
Insert_DynamicArray(da, 1, &p4);
Insert_DynamicArray(da, 2, &p5);
printf("capacity:%d\n", da->capacity);
Insert_DynamicArray(da, 100, &p6);
printf("capacity:%d\n", da->capacity);
Foreach_DynamicArray(da,myPrint);
printf("-----------------------\n");
RemoveByepos_DynamicArray(da,2);
Foreach_DynamicArray(da,myPrint);
printf("-----------------------\n");
}
int main()
{
test();
system("pause");
return EXIT_SUCCESS;
}
(RemoveByepos_DynamicArray(da,2);是不是发现这个没有定义就用了,因为网课老师中视频没有,我自己也不知道如何运用好就不加了,删除相关的这个应该还是可以运行的)
接下来分享我这周除了对于数据结构的学时外,做的其他总结的归纳。如:C语言:我是在菜鸟教程中学习的,并自己做了思维导图(里面有自己写的代码,和直接拷贝网站的代码)
想要源文件的也可以call我。
剩下的就是令我崩溃的事了就是在visual 中老是有问题出现,鄙人将自己的错误信息整合下归纳了下。希望对大家有用。
malloc是啥?怎么用?
https://zhidao.baidu.com/question/617271249569738692.html?fr=iks&word=malloc&ie=gbk
【vs】vs编译爆出大量莫名其妙错误的解决方法
Visual Studio 2019安装失败的解决方法(Windows10)
卸载VS时彻底删除C盘文件方法
https://blog.csdn.net/Lewispu/article/details/80359757(这个只针对2015即以前的,2017/9版的删除我也没找到,如果有大佬知道,帮小弟的帮,发给小弟吧,小弟找了好几天了)
其他的问题在百度和淘宝上基本能找到。
(有一说一,画质是真的感人,在写memcpy函数时一片片的雪花(哭了)。我自己写还以为错了。/压缩包里的网课老师,我理解不了,给我的感觉是东讲讲,西讲讲,改错误还挺多,B站大学真香~https://www.bilibili.com/video/BV15E411V7S2?from=search&seid=8134989932876859347
https://www.bilibili.com/video/BV1jW411K7yg?from=search&seid=8134989932876859347,看这些结合着压缩包的看就好多了。不多说先去看B站再看下个压缩包了)
(刚开始学习-发布学习进程,不是装B,行不更名坐不改姓的真无知小白,希望有路过的大佬,键下留情)