今天给大家说下链表以及顺序表的区别吧,以及定义顺序表是的注意事项和链表的注意事项。
首先我们知道,链表就是针对顺序表的缺点创造出来的,但是不可否认的是,书序表确实有他自己的优点,他可以随机读取,大大的提高了读取的效率。但是链表(这里指的是不带头的单链表,不循环)就不同了,他如果访问一个数据,则必须要从头开始,比较麻烦。所以,只能说是各有各的好吧!
我们知道在定义顺序表的时候,很绕(个人感觉的很绕),那我们如何让区分呢?我们来看下面的代码。
#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;
}
这个是我定义了一个链表(不带头单链表不循环),在开辟空间的时候,开辟的应该是链表这个类型的大小,所以一定要注意一下。
总结,个人感觉这一块还是很绕的,希望大家写的时候多注意,今天就是在写数组栈的时候,把自己给写糊涂了,然后想了一下,才明白,希望大家不会和我犯同样的错误。
最后,如果这个小错误大家也发现了的话,希望大家给我点一下赞吧!!!谢谢大家的支持