2021-04-24

                                                                                                                                                  青木瓜-学习篇-数据结构- 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编译爆出大量莫名其妙错误的解决方法

https://blog.csdn.net/qq_41866437/article/details/102786540?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

Visual Studio 2019安装失败的解决方法(Windows10)

https://blog.csdn.net/great_beauty/article/details/109584799?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%97%A0%E6%B3%95%E4%BB%8E%E2%80%9Chttps://aka.ms/vs/16/relea&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-109584799.nonecase

卸载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,行不更名坐不改姓的真无知小白,希望有路过的大佬,键下留情)

 

 

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值