数据结构:线性结构(1)

数据结构中的线性表即元素之间存在一对一关系的表
常见的线性结构有:数组、表、功能受限的表(栈、队列)

第一节

线性表的存储又分为:
1、顺序存储:在一块连续的内存存储元素与元素之间的关系
顺序存储的优点:速度快、不易产生内存碎片
顺序存储的缺点:对内存要求高、添加删除不方便
顺序表运算

typedef struct Array
{
	size_t size;
	TYPE base;
}Array;
//创建
Array* create_array(TYPE len)
{
	Array* array=malloc(sizeof(Array));
	base=malloc(sizeof(TYPE)*len);
	size=len;
	return array;
}
//销毁
void destroy_array(Array* arr)
{
	free(arr->size);
	free(arr);
}
//访问
TYPE* access_array(Array* arr,int index)
{
	if(index>arr->size || index<0) return NULL;
	return arr->base+i;
}
//查找
int find_array(Array* arr,TYPE data)
{
	for(int i=0;i<arr->size;i++)
	{
		if(arr->base+i == data) 
		{
			return i;
		}
	}
	return NULL;
}
//排序
void sort_array(Array* arr)
{
	for(int i=0;i< arr->size;i++)
	{
		for(int j=i+1;j< arr->size;j++)
		{
			int temp=0;
			if(arr[i] < arr[j])
			{
				temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp
			}
		}
	}
}
//遍历
void show_array(Array* arr)
{
	for(int i=0;i < arr->size;i++)
	{
		printf("%d ",arr->base+i);
	}
	printf("\n");
}
//删除
bool delete_array(Array* arr,int index)
{
	if(index<0 || index> arr->size) return false;
	for(int i=arr->size-1;i>index;i--)
	{
		arr->base[i-1]=arr->base[i];
	}
}
//插入
bool insert_Array(Array* arr,int index,TYPE data)
{
	if(index<0 || index>arr->size) return false;
	for(i=index;i<arr->size;i++)
	{
		arr->base[i]=arr->base[i+1];
	}
	return true;
}

TYPE表示数据类型
size定义的是元素个数,防止越界
base则用来定义堆内存的首地址,存储元素
顺序表逻辑上相邻的元素

在物理上也是相邻的,若要访问第i个元素可以使用base+i进行访问

2、链式存储:元素随机存储在内存空间内,元素之间建立联系(通过指针)构成关系
链式存储的优点:对内存要求低、添加删除方便
链式存储的缺点:查找速度慢,容易产生内存碎片,只能从头逐个遍历
链表又分为单向链表和双向链表
下面是单向链表的形式

// 创建节点
Node* create_node(void* data)
{
	Node* node = malloc(sizeof(Node));
	node->data = data;
	node->next = NULL;
	return node;
}



// 创建链表
List* create_list(void)
{
	List* list = malloc(sizeof(List));
	list->head = NULL;
	list->tail = NULL;
	list->size = 0;
	return list;
}

一、区别
1、单向链表:只有一个指向下一结点的指针,也就是只能next。
2、双向链表:除了有一个指向下一结点的指针外,还有一个指向前一结点的指针,可以通过prev()快速找到前一结点。
二、使用情况不同
1、单向链表:适用于节点的增加删除。
2、双向链表:适用于需要双向查找节点值的情况。
三、读取不同
1、单向链表:只能单向读取。
2、双向链表:可以双方向读取。

链表优于数组的有:
插入删除不需要移动元素,时间性能为O(1)
存储空间位置可以任意
存储空间大小不需要事先确定,也没有溢出

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值