//试写一算法在带头结点的单链表结构上实现线性表操作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;
}