
最近在备考,有点忙,看到有人关注就发个心得,后面再看看更新不
个人小白,大佬请谅解
单链表,也称为链表
最开始,我们需要定义一个结构体
#include
#include
typedef struct LNode
{
int data;
struct LNode* next;
}LNode,*LinkList;
typedef这个关键字是结构体自定义命名,我们把这个结构体命名为LNode还有*LinkList
也就可以使用 LNode->data;LNode->next; 来指向结构体内的成员
一些代码是用ElemType data; 这个意思需要你最开始定义了一个全局变量
例如:typedef int ElemType 这样后续修改就只需要修改这个全局变量就可以了
像上面这个 int 型变量也可以更改为 char 类型,具体看用哪个
struct LNode* next 用来指向下个结点
接下来需要定义头指针
int main()
{
LNode* L = (LNode*)malloc(sizeof(LNode));
L->next = NULL;
return 0;
}
也可以不定义头指针,但考试一般都会考有带头指针的吧,头指针可以存储长度,或者自己存自己想存的内容
定义这个头指针,我们需要从内存开辟一个空间,C语言需要用到malloc函数
拆开这句话,LNode* L 等价 LinkList L,先定义这个L这个变量
malloc(),开辟一个空间,(LNode)这个结构体的大小,sizeof来算多少
能不能写成malloc(8); 这个空间是8那么大,实际并不能这么写,不利于更改、移植等原因
最后这个(LNode*)是强制类型转换,L->next=NULL;置空,NULL为关键字
---鸽了,有点多,有时间再补充---
---------------------------------------------
顺序表有序合并
typedef struct
{
ElemType base[MAXSIZE];
int length;
}SqList;
SqList* initList()
{
SqList* L = (SqList*)malloc(sizeof(SqList)*MAXSIZE);
L->length = 0;
return L;
}
void MergeSqList(SqList* La, SqList* Lb, SqList* Lc)
{
Lc->length = La->length + Lb->length;
SqList* pa = La->base, pa_last = pa + La->length - 1;
SqList* pb = Lb->base, pb_last = pb + Lb->length - 1;
SqList* pc = Lc->base;
while (pa <= pa_last && pb <= pb_last)
{
if (*pa < *pb)
*(pc++) = *(pa++);
else
*(pc++) = *(pb++);
}
while (pa <= pa_last)
*(pc++) = *(pa++);
while (pb <= pb_last)
*(pc++) = *(pb++);
}
链表有序合并
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LNode,*LinkList;
void MergeLinkList(LinkList* La, LinkList* Lb, LinkList* Lc)
{
*Lc = *La;
LinkList pa = *(La)->next, pb = *(Lb)->next;
LinkList pc = *(Lc);
while (pa && pb)
{
if (pa->data < pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa : pb;
free(Lb);
*La = *Lb = NULL;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)