链表以及顺序表的区分

今天给大家说下链表以及顺序表的区别吧,以及定义顺序表是的注意事项和链表的注意事项。

首先我们知道,链表就是针对顺序表的缺点创造出来的,但是不可否认的是,书序表确实有他自己的优点,他可以随机读取,大大的提高了读取的效率。但是链表(这里指的是不带头的单链表,不循环)就不同了,他如果访问一个数据,则必须要从头开始,比较麻烦。所以,只能说是各有各的好吧!

我们知道在定义顺序表的时候,很绕(个人感觉的很绕),那我们如何让区分呢?我们来看下面的代码。

#include<assert.h>
#include<stdio.h>
typedef struct sqlist
{
	int* a;      //表示开辟玩空间后,指向的起始位置
	int capacity;//表示开辟了多少空间,也就是有多少个这种类型的数据
	int size;    //此大小表示的是存放到顺序表中的实际数据个数有多少
}sq;
int main()
{
	sq list;//定义了一个名叫list的顺序表
	list.a = (sq*)malloc(sizeof(int) * 4);
	assert(list.a);
	list.capacity = 4;
	list.size = 0;
	return 0;
}

我定义了一个名字叫做list的顺序表,这个个人感觉不是很重要,我想说的是这个在动态申请空间的这,这个尤为重要,(因为今天在写数组栈的时候,给弄错了),因为这个capacity表示的是顺序表中的数组的大小,所以开辟的类型的是int。这里注意,还有就是,我定义顺序表的时候是重命名为sq了,在main函数中,我定义的sq list表示的是,通俗理解就是list就是顺序表,这个顺序表的名字就是list,这里不要和链表搞混了。

再来看下面的代码

typedef struct sqlist
{
	int data;
	struct sqlist* next;
}sq;
int main()
{
	sq* plist;//定义了一个名叫plist的节点
	sq* tem = (sq*)malloc(sizeof(sq));//开辟的是一个节点大小的空间
	assert(tem);
	plist = tem;
	//printf("%u", sizeof(sq));
	return 0;
}

这个是我定义了一个链表(不带头单链表不循环),在开辟空间的时候,开辟的应该是链表这个类型的大小,所以一定要注意一下。

总结,个人感觉这一块还是很绕的,希望大家写的时候多注意,今天就是在写数组栈的时候,把自己给写糊涂了,然后想了一下,才明白,希望大家不会和我犯同样的错误。

最后,如果这个小错误大家也发现了的话,希望大家给我点一下赞吧!!!谢谢大家的支持

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值