跪求数据结构高手解答一道题,答好+50分,谢绝去其他网站抄

如图,就是这道题,我去很多网站上找过程序,都不尽如人意,求助数据结构高手帮忙写下,谢谢

/*
下面有运行结果
你看看吧
*/
# include <stdio.h>
# include <stdlib.h>
//函数结果状态代码
# define OK 1
# define ERROR 0
typedef int Status;//Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int ElemType;
# define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量
# define LIST_INCREMENT 4 //线性表存储空间的分配增量
struct SqList
{
ElemType * elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
};
//构造一个空的顺序线性表L
Status InitList(SqList * L)
{
(* L).elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!(* L).elem)
{
exit(-1);//存储分配失败
}
(* L).length = 0;//空表长度为0
(* L).listsize = LIST_INIT_SIZE;//初始存储容量
return OK;
}
//返回L中数据元素的个数
int ListLength(SqList L)
{
return L.length;
}
//用e返回L中的第i个元素的值,1=<i<=ListLength(L)
Status GetElem(SqList L, int i, ElemType * e)
{
if (i<1 || i>L.length)
{
return ERROR;
}
* e = *(L.elem + i - 1);
return OK;
}
//在L的第i个位置之前插入新的数据元素e,L的长度加1
Status ListInsert(SqList * L, int i, ElemType e)
{
ElemType * newbase, * q, * p;
if (i<1 || i>(* L).length+1)//i值不合法
{
return ERROR;
}
if ((* L).length >= (* L).listsize)//当前存储空间已满,增加分配
{
if (!(newbase = (ElemType *)realloc((*L).elem,((* L).listsize+LIST_INCREMENT)*sizeof(ElemType))))
{
exit(-1);//存储空间分配失败
}
(* L).elem = newbase;//新基址
(* L).listsize += LIST_INCREMENT;//增加存储容量

}
q = (* L).elem + i - 1;//q为插入位置
for (p=(* L).elem+(* L).length-1; p>=q; --p)//在插入位置的元素以及其后的元素后移
{
* (p+1) = * p;
}
* q = e;//插入e
++(* L).length;//表长增加1
return OK;
}
void print1(ElemType * c)
{
printf("%d ",* c);
}
//从表A中第一个元素开始,交替的用表A和B中的元素形成一个新表
//如果La的长度大于Lb的长度,则将La的剩余元素追加到新表的后面
//返回生成的新表
SqList Alternate(SqList La, SqList Lb)
{
SqList Lc;//交替生成的新表
InitList(&Lc);
ElemType e;
int La_len,Lb_len;
int i;
La_len = ListLength(La);//求线性表的长度
Lb_len = ListLength(Lb);
int length = La_len > Lb_len ? Lb_len : La_len;
for (i=1; i<=length; ++i)
{
GetElem(La,i,&e);//取出La中的第i个元素赋给e;
ListInsert(&Lc,ListLength(Lc)+1,e);//插入到Lc表的最后一个位置
GetElem(Lb,i,&e);//取出Lb中的第i个元素赋给e
ListInsert(&Lc,ListLength(Lc)+1,e);//插入到Lc表的最后一个位置
}
if (La_len > Lb_len)//将La的剩余元素插入到Lc表
{
for (i=Lb_len+1; i<=La_len; ++i)
{
GetElem(La,i,&e);
ListInsert(&Lc,ListLength(Lc)+1,e);
}
}
else if (La_len < Lb_len)//将La的剩余元素插入到Lc表
{
for (i=La_len+1; i<=Lb_len; ++i)
{
GetElem(Lb,i,&e);
ListInsert(&Lc,ListLength(Lc)+1,e);
}
}
return Lc;
}
Status ListTraverse(SqList L, void (* vi)(ElemType *))
{//依次对L的每个元素调用vi函数
ElemType * p;
int i;
p = L.elem;
for (i=1; i<=L.length; i++)
{
vi(p++);
}
printf("\n");
return OK;
}
int main(void)
{
SqList La,Lb;
int j;

InitList(&La);//创建空表La
for (j=1; j<=5; ++j)
{
ListInsert(&La,j,j);//在表尾依次插入1-5
}
printf("La=");//输出La的内容
ListTraverse(La,print1);
InitList(&Lb);//创建空表Lb
for (j=1; j<=10; ++j)
{
ListInsert(&Lb,j,2*j);//在表尾依次插入2,4,6,8,10
}
printf("Lb=");//输出Lb
ListTraverse(Lb,print1);

SqList Lc = Alternate(La,Lb);
printf("从表La中第一个元素开始,交替的用表La和Lb中的元素形成一个新表Lc=\n");
ListTraverse(Lc,print1);
return 0;
}
/*
在vc++6.0中的输出结果:
------------------------
La=1 2 3 4 5
Lb=2 4 6 8 10 12 14 16 18 20
从表La中第一个元素开始,交替的用表La和Lb中的元素形成一个新表Lc=
1 2 2 4 3 6 4 8 5 10 12 14 16 18 20
Press any key to continue

------------------------------:
*/
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-12
那你组成嘛···········

高手解答一道数据结构习题
关键在于每次你修改链表指针后释放空间 Status Delete_Between(Linklist &L,int mink,int maxk)\/\/删除元素递增排列的链表L中值大于mink且小于maxk的所有元素 { p=L;while(p->next->data<=mink) p=p->next; \/\/p是最后一个不大于mink的元素 if(p->next) \/\/如果还有比mink更大的元素 { q=...

我是大一新生..关于计算机专业的一些问题
16、我还是强调认真听专业课,因为有些课像《数据结构》、《编译原理》、《操作系统》等等,这种课老师讲一分钟能让你明白的内容,你自己看要看好几个月,有的甚至看了好几年都看不明白。 17、抓住在学校里的各种实践的机会,要为自己积累经验,就业时经验比什么都有用。 18、多去图书馆,每个学校的图书馆都有很多...

数据结构的问题,求高手解答。 T[S1[0]+1..S1[0]+S2[0]]
表示S1[0]+1到S1[0]+2 即T[S1[0]+1]=S2[1]

请教高手,我是数据结构的处学者,对于算法还不太熟悉,下面这道题,请问这...
1,q不等于L->next;进入if语句,这一点看起来,链表p和L是有关连的。2,指针pre接管(指向)链表p的后续结点。3,把链表q的当前结点,插入到L后面。分析:1,从p和L关系,和把p插入到L后面。可知,p就应该是在L的前面。或者是一个单循环链表。2,从if语句看来,只是改变了一个结点的操作。...

...公开密钥加密算法 ”数据结构课程设计!高手解答啊!!
题目:用RSA算法加密时,已经公钥是(e=7,n=20),私钥是(e=3,n=20),用公钥对消息M=3加密,得到的密文是___?给出详细过程。 谢谢!答:你所说的:n=20 d=7 公钥 e=3 私钥 对M=3 进行加密 M'=M^d%n (M的d次方,然后除以n取余数)M'=3^7%20=2187%20=7 加密后等於7 对M...

...方向有哪些啊?考哪些学校的计算机研究生好些?跪求这方面的网站...
我也去答题访问个人页 关注 展开全部 计算机专业就业方向一、 关于企业计算方向企业计算(Enterprise Computing)是稍时髦较好听的名词,主要是指企业信息系统,如ERP软件(企业资源规划)、CRM软件(客户关系管理)、SCM软件(供应链管理,即物流软件),银行证券软件,财务软件,电子商务\/政务(包括各种网站),数据仓库,数据挖...

如何自学C语言?高手进来传授一下学习经验
问题3、第五章后面章节的学习方法 答:我只能说出自己的一些理解和看法 1、数组:数组是复杂数据结构中最简单的一种,形象地说就是把一些元素给编上号码放在一个容器里面。数组中的每一个变量的赋值和调用方式和普通变量没有任何区别,只不过他是属于数组中的一个元素,是“有组织的”。2、函数:函数...

相似回答