第二章 线性表-----单链表

一.带头节点的单链表。

带头结点非空单链表
在这里插入图片描述
线性表的单链表的存储结构描述:

typedef struct{
	ElemType data;//数据域
	struct LNode*next;//指针域。 
}LNode,*LinkList;

在这里插入图片描述
在这里插入图片描述
头指针为空,L=NULL(不带头结点的单链表为空)。

在这里插入图片描述
L->next=NULL;(带头结点的空单链表L)。

p结点的数据域值:p->data;
p结点的后继结点:p->next;

插入操作。
单链表插入操作的主要步骤:
1.确定插入位置(找到插入位置的前驱结点).
2.产生待插入的新结点。
3.修改链指针,使新结点链如单链表的指定位置。
ListInsert_L(&L,i,e)的实现。
操作要求:在带头结点的单链表L中第i个元素ai之插入元素值为e的结点。其中1<=i<=n+1;
在这里插入图片描述
1.找到第i个结点的前驱结点(即第i-1个结点)

p=L;j=0;
while(p&&j<i-1){
	p=p->next;
	j++;
}

2.产生数据域值为e的新结点s.

在s=(LinkList)malloc(sizeof(LNode));
s->data=e;

3.修改链指针.

S->next=p->next;
p->next=s;

实现算法;

status ListInsert_L(LinkList&L,int i,ElemType e){
	p=L;
	j=0;
	while(p&&j<i-1){
		p=p->next;
		j++;
	}
	if(!p||j>i-1)return ERROR;
	s=(LinkList)malloc(sizeof(LNode));
	if(s==NULL) return OVERFLOW;
	s->data=e;
	s->next=p->next;
	p->next=s;
	return ok;
}

删除操作
删除操作ListDelete_L(&L,I,&e)
操作要求:删除带结点的单链表L中的第i个元素,并用e返回值,1<=i<=n)
在这里插入图片描述
1.找到第i个结点的前驱结点(即第i-1个结点)

p=L;j=0;
while(p->next&&j<i-1){
	p=p->next;
	++j;
}

2.修改链指针(使待删结点从链中脱离)

q=p->next;
p-next=q->next;
e=q->data;

3.释放空间

free(q);

实现算法:

status ListDelete_L(Linklist&L,int i,ElemType&e){
	p=L;
	j=0;
	while(p->next&&j<i-1){
		p=p->next;
		j++;
	}
	if(!(p->next)||j>i-1) return ERROR;
	q=p->next;
	p->next=q->next;
	e=q->data;
	free(q);
	return ok;
}

二.不带头结点的单链表;

在这里插入图片描述
插入操作:
操作要求:在不带头结点的单链表中第1个结点之前插入新元素e.

status ListInsert_LN(LinkList&L,ElemType e){
	s=(LinkList)malloc(sizeof(LNode));
	if(s==NULL) return OVERFLOW;
    s->data=e;
    s->next=L;
    L=s;
} 

在这里插入图片描述
删除操作
操作要求:在不带头结点的单链表中删除第1个元素。

status ListDelete_LN(LinkList&L,ElemType&e){
	if(L==NUll) return ERROR;
	else{
		q=L
		L=q->next;
		e=q-data;
		free(q);
		return ok;
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值