数据结构 单链表 定义结构体和头指针 C语言

数据结构 单链表 定义结构体和头指针 C语言,第1张

最近在备考,有点忙,看到有人关注就发个心得,后面再看看更新不

个人小白,大佬请谅解

链表,也称为链表

最开始,我们需要定义一个结构体

#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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1323916.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存