实验目的:
(1)熟练掌握线性表的单链式存储结构及在其上实现线性表的各种基本运算的方法。
(2)掌握和理解本实验中出现的一些基本的C语言语句。
(3)体会算法在程序设计中的重要性。
实验内容:
(1)设计一算法,逆置带头结点的动态单链表head。要求利用原表的结点空间,并要求用尽可能少的时间完成。
(2)设有两个按元素值递增有序的单链表A和B,编一程序将A表和B表归并成一个新的递增有序的单链表C(值相同的元素均保留在C表中),并要求利用原表的空间存放C。
[说明] 若s和t是用单链表存储的两个串,设计一个函数将s串中首次与串t匹配的字串逆置。
linkstring * invert - substring (s, t)
linkstring * s, * t;
{
linkstring *prior, *p, *t1, *r, *q, *u;
prior =s;
p=s;
t1 =t;
if ((1) ) printf ("error\n") ;
else
{
while { p ! = NULL && t1! = NULL)
{
if (p- >data = = t1 - >data)
{
p = p- >link;
t1 = t1- >link;
}
else
{
(2)
p = prior - > link;
}
t1 = t- >link;
}
if (t1 ! : NULL) printf ("cannot find");
else
{
(3)
r = q- >link;
q- >link = p;
while (r ! = p)
{
u = r- >link;
(4)
q=r;
r = u;
}
(5)
}
}
}
假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。 // 将合并逆置后的结果放在C表中,并删除B表 Status ListMergeOppose_L(LinkList &A,LinkList &B,LinkList &C){ LinkList pa,pb,qa,qb; pa=A; pb=B; qa=pa; // 保存pa的前驱指针 qb=pb; // 保存pb的前驱指针 pa=pa->next; pb=pb->next; A->next=NULL; C=A; while(pa&&pb){ if(pa->data<pb-> data){ qa=pa; pa=pa->next; qa->next=A->next; A->next=qa; } else{ qb=pb; pb=pb->next; //将当前最小结点插入A表表头 A->next=qb; } } while(pa){ qa=pa; pa=pa->next; qa->next=A->next; A->next=qa; } while(pb){ qb=pb; pb=pb->next; qb->next=A->next; A->next=qb; } pb=B; free(pb); return OK; }
A、结点的数据域用于存储线性表的一个数据元素
B、结点的指针域用于存放指针,指示本结点所存储数据元素的直接后继元素的地址
C、所有数据通过指针的链接而组成单链表
D、单链表中各结点地址不可能连续
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!