线性表

//试写一算法在带头结点的单链表结构上实现线性表操作LENGTH(L)
int LENGTH(Sqlist L)
{
	INT COUNT=0;
	p=L->next;
	for(i=0;i<=L.length-1;i++)
	{
		if p!=NULL
			{
				count++;
				p=p->next;
			}
	}
	return count;
}

//试写一算法在带头结点的单链表结构上实现线性表操作LOCATE(L,X)
int LOCATE(Sqlist L,ElemenType x)
{
	p=L->next;
	for(i=0;i<=L.length-1;i++)
	{
			if(p!NULL && p->next!=x)
			{
				p=p->next;

			}		
		
	}	
	return i+1;
	
	
}
//另外一种写法
int LOCATE(Sqlist L,ElemenType x)
{
	int i;
	if(L)
		{
			i=1;
			p=L->next;
			while(p)
			{
				if (p->data==x)
				{
					return i;
				}
				i++;
				p=p->next;
			}
		}
		return 0;
	}
	
//设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
int insert_x(Sqlist &L,ElementType x)
{
	for(i=L.length-1,i>=0;i++)
	{
		if x<=L.elem[i]
		{
			L.elem[i]=L.elem[i-1];			
		}
		
	L.elem[i]=x;
	return 1;
	
	}
	
}	


//问题描述:
//已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n。试写一算法将这两个链表连接在一起(即令其中一个表的首元结点连在另一个表的最后一个结点之后),假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算。请分析你的算法和时间复杂度。

//主要思想:
//比较ha和hb两个链表的长度,方法是从两个链表的表头开始一起依次遍历,一旦发现有一个变为空了,则变为空的那个链表的长度是较小的
//接下来把该较小的链表的首元结点链接到长的那个长的链表的尾部(一次就好)
//因此该算法的复杂度主要是在刚开始对两个链表进行遍历时,所以时间复杂度为:m<=n?O(m):O(n) (取决于较短的那个链表)

int link(LinkList ha,Linklist hb,LinkList *hc)
{
	LinkList pa,pab;
	if (ha && hb)
	{
		pa=ha;
		pb=hb;
		
		while(pa->next && pb->next)
		{
			pa=pa->next;
			pb=pb->next;
		}
	
		//如果ha的长度大于hb的长度,则把hc链接到ha的头结点,并且将hb的结点一个一个的连接到长的那个(ha)的尾部 

		if (!pa->next)
		{
			*hc=ha;
			pa->next=hb->next;
		}
	
		//如果ha的长度小于hb的长度,则把hc链接到hb的头结点,并且将ha的结点一个一个的连接到长的那个(hb)的尾部 

		if (!pa->next)
		{
			*hc=ha;
			pa->next=hb->next;
		}
	
		return1; 
	}	
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值