数据结构笔记(3)

这次主要关注点在:静态链表,双向链表,循环链表。


1.静态链表

线性表的静态链表的存储结构

<pre name="code" class="cpp">
#define MAXSIZE 1000
typedef struct
{
ElemType data;
int cur;
}
Component,staticLinkList[MAXSIZE];


 
动态链表:采用malloc()和free()两个函数实现申请和释放。 

静态链表:将所有未被使用过的及已被删除的的分量用游标做成一个备用链表,每当进行插入时,便可以从备用链表上去的第一个节点作为待插入的新节点。

若备用节点空间链表非空,则返回分配的节点下标,否则返回0

/* 在链表L中第i个元素之前插入数据元素e

 

Status ListInsert( StatticLinkList L, int i , ElemTpye e)
{
	int j,k,l;
	k =MAX_SIZE-1;
	if(ii<1||i>ListLength(L)+1)
	return ERROR;
	j = Malloc_SSL(L); //获得空闲分量下标
	if(j)
	{
		L[j].data = e;
		for( l=1;l<=i-1;l++)
			k = L[k].cur;
		L[j].cur = L[k].cur;
		L[k].cur=j;
		return OK;
	}
	return ERROR;
}


 

/*删除在L中第i个元素e*/
status ListDelete( StaticLinkList L ,  int i )
{
	int j , k;
	if( i<1||i>ListLength(L))
		return ERROR;
	k = MAX_SIZE - 1;
	for( j=1; j<i-1 ;j++)
		k = L[k].cur;
	j = L[k].cur;
	L[k].cur =L[j].cur;
	Free_SSL(L,j);     //
	return OK;
}


静态链表修改时,只需要修改游标(cur),并未解决连续修改带来的表长不确定,,失去顺序存储结构随即存储的特性。是为了给没有指针的高级语言设计的一种巧妙的实现单链表能力的方法。

 

2、循环链表

循环链表和单链表的主要差异在与判断条件,原来判断条件是p->next是否为空,现在的判断条件p->next不等于头结点,则循环未结束。

 

p = rearA->next;
rearA->next = rearB->next->next
reaB->next= p;
free(p);


3、双向列表

双向链表中,每个节点都有两个指针域,一个指向直接后继,一个指向直接前驱。

既:在双向列表p中

p->next->prior = p->prior->next


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值