0
点赞
收藏
分享

微信扫一扫

408数据结构线性表2

素的盐 2022-05-01 阅读 73

文章目录


一、单链表的定义

线性表的链式存储

typedef struct LNode{//typedef用于重命名一个数据类型
	int data;//数据
	struct LNode *next;//指向下一个节点的指针
}LNode,*LinkList;

二、基本操作

1.头插法

代码如下(示例):

LinkList Insert_Head(LinkList &L){
	LNode *s;int x;
	L=(LinkList)malloc(sizeof(LNode));
	L->next=NULL;
	scanf("%d",&x);
	while(x!=9999){
		s=(LNode *)malloc(sizeof(LNode));
		s->data=x;//将x赋值给s指针中的数据对象
		s->next=L->next;//将s指针中的下一个节点对象连接到L的next上
		L->next=s;//将s装进L的next里面
	}
}

以下图片仅为个人记忆方法和逻辑理解
王道书中的图片是那种连接的锁链结构,但是个人觉得应该是这种嵌套结构,第一个节点放进链表头结点的next指针中,再插入新节点时,将之前放进去的节点掏出来放进新的节点next指针中,再将这个新节点放进链表头结点的next指针中
在这里插入图片描述

2.按序号/值查找节点值

从第一个节点出发,直到找到第i个节点为止,超出范围返回最后一个节点的指针域NULL
代码如下(示例):

LNode *GetElem(LinkList L,int i){
	int j=1;
	LNode *p=L->next;//定义一个指向头节点指针域的指针
	if(i==0)
		return L;
	if(i<0)
		return NULL;
	while(P!==NULL&&j<i){
		p=p->next;
		j++;
	}
	return p;
}

//按值查找
LNode *LocateElem(LinkList L,int e){
	LNode *p=L->next;
	while(p!=NULL&&p->data!=e){
		p=p->next;
	}
	return p;
}

3.尾插法

LinkList Insert_Tail(LinkList &L){
	LNode *s,*r;int x;
	L=(LinkList)malloc(sizeof(LNode));
	L->next=NULL;
	r=L;
	scanf("%d",x);
	while(x!=9999){
		s=(LNode *)malloc(sizeof(LNode));
		s->data=x;
		r->next=s;
		r=s;
		scanf("%d",x);
	}
	r->next=NULL;
	return L;
}

仅个人理解方式和记忆方法
与头插法的不同在于将新节点放入链表头结点的next指针中后,又定义了一个节点类型的指针r,将r指向放入链表头结点的next指针中的新节点
在这里插入图片描述

总结

对于链表部分的学习,个人认为写代码要比看懂更加重要,像头插法的思想可以用于将原链表进行逆置。

举报

相关推荐

0 条评论