持续更新,目前笔者的学习进度中只有这些知识是在学习数据结构之前没有注意到的。
struct
struct是 C++ 中用于定义结构体(structure)的关键字。
这是一种可以自定义的构体中的每个成员可以是不同的数据类型,包括基本数据类型(如int double char等)和其他用户定义的数据类型(如数组、指针(记住这个指针,我们在学习数据结构的时候会大量使用这个)、其他结构体等)。
以下两端代码就是在学习数据结构的时候比较常见的使用struct的地方。当然也不局限这几点,笔者目前只学到了这几种。
// 定义链表节点结构体
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode, *LinkList;
//结构体定义队列
typedef struct
{
ElemType data[MaxSize];
int front, rear;
int size;
} SqQueue;
typedef
官方解释:是 C++ 中的一个关键字,用于为现有的数据类型创建一个新的名称(别名)。
大白话:给你的数据类型起一个新的名字,比较在数据结构中,我们会自定义很多结构(链表 队列 栈等等),用自己起的名字毕竟还是更方便。
typedef long long ll;
//long long 就等价于ll
typedef struct
{
ElemType *data;
int length;
int MaxSize;
} SqList;
//类似的定义方法会在之后的数据结构的知识中反复使用。
通过使用typedef
,我们可以方便地使用SqList
来代替完整的结构体定义,从而提高代码的可读性和可维护性。
也就是说,我们可以在后面的代码中使用SqList来使用这一个新的结构体类型。
int main()
{
SqList list;
return 0;
}
->符号
这个符号一般是用于在对结构体中的数据进行操作。
贴一段代码,方便理解。
bool ListInsert(LinkList &L, int i, ElemType e)
{
LNode *p = L;
int j = 0;
while (p != NULL && j < i - 1)
{
p = p->next;
j++;
}
if (p == NULL)
{
return false;
}
LNode *s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
这段代码主要就是用于在链表中进行操作,对于链表进行头插法创建链表。
LNode *s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
其中,s->data = e;是为了将e的值插入到新建的节点s的data处。
s->next = p->next;是为了将s的next指针指向p的next(即节点p)。
p->next = s;是将 p 的 next 指向 s。
方便理解,假设我们有如下链表。
head -> A -> B -> C -> NULL
其中,A B C是链表中的节点,NULL表示链表的结尾。
进行如上操作后,我们会得到以下的链表。
head -> A -> s -> B -> C -> NULL