敲键盘的黑眼狐 2016-11-05 14:41 采纳率: 0%
浏览 872
已结题

关于归并算法出错的提问

这个算法的归并部分有什么问题?求解释
#include
#include
typedef int ElemType;
typedef int status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList InitLinkList( )
{
LinkList L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;
return L;
}

/*LinkList Create(LinkList L,int n)逆位序输入
{
LinkList p;
int i;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for( i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}

}*/
void Create(LinkList L)
{
int n;
LinkList p,q;
p=L;
printf("请输入结点个数n和n个数据元素:\n");
scanf("%d",&n);
while (n--)
{
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
}
void Print(LinkList L)
{
int num=0;
LinkList p;
p=L->next;
while (p)
{
num++;
printf("%d ",p->data);
p=p->next;
}
printf("\n该链表长度为%d\n",num);
}
status GetElem(LinkList L,int i)
{
int j;
ElemType e;
LinkList p;
p=L->next;
j=1;
while(p&&j {
p=p->next;
j++;
}
if(!p||j>i)
printf("错误!程序强制退出!");
exit(!0);
e=p->data;
return e;
}
status ListInsert(LinkList L,int i,ElemType e)
{
int j;
LinkList p,s;
p=L;
j=0;
while (p&&j {
p=p->next;
++j;
}
if(!p||j>i-1)
printf("错误!程序强制退出!");
exit(!0);
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
void Delete(LinkList L,int i)
{
LinkList p,q;
int j=0;
p=L;
while(p->next&&j {
p=p->next;
++j;
}
if(!(p->next)||j>i-1)
printf("错误!程序强制退出!");
exit(!0);
q=p->next;
p->next=q->next;
free(q);
}
LinkList MergeList(LinkList La,LinkList Lb)
{
LinkList pa,pb,pc,Lc;
pa=La->next;
pb=Lb->next;
Lc=La;
pc=La;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
pc->next=pa?pa:pb;
}
free(Lb);
return pc;
}
int main()
{
int i,get,a,b,Del;
LinkList la,lb,lc,l;
/* printf("-----创建链表阶段-----\n");
l=InitLinkList( );
Create(l);
//int n;逆位序输入所需代码
//printf("请输入欲创建的函数的结点个数:");逆位序输入所需代码
//scanf("%d",&n);逆位序输入所需代码
//l=Create(l,n);逆位序输入所需代码
Print(l);
printf("-----查找数据阶段-----\n");
printf("请输入欲查找的位置:");
scanf("%d",&i);
get=GetElem(l,i);
printf("查找得这个位置上的数据为:%d\n",get);
printf("-----插入数据阶段-----\n");
printf("请输入欲插入的位置:");
scanf("%d",&a);
printf("请输入插入的数据:");
scanf("%d",&b);
ListInsert(l,a,b);
Print(l);
printf("-----删除数据阶段-----\n");
printf("请输入欲删除的数据的位置:\n");
scanf("%d",&Del);
Delete(l,Del);
Print(l);*/
printf("-----归并链表阶段-----\n");
printf("请输入链表La的数据:");
la=InitLinkList( );
Create(la);
printf("请输入链表Lb的数据:");
lb=InitLinkList( );
Create(lb);
lc=MergeList(la,lb);
Print(lc);
return 0;
}

  • 写回答

2条回答 默认 最新

  • Xefvan 2016-11-05 16:04
    关注

    原谅我没看出这是归并!!归并算法,指的是将两个已经排序的序列合并成一个序列的操作,如果你得La和Lb都是无序的,怎么排?

    附上:我自己写的 http://blog.csdn.net/tutuxs/article/details/52878391

    这里面有归并(C++实现),主要看下思路,明白什么是归并就可以了

    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条