展开全部
有点偷懒写的,不知道符不符合要求
#include<stdio.h>
#define NULL 0
typedef struct Pnode//定义节点
{
int key;
Pnode *next;
}P;
P a,b,c;//三个链表的头结点
void init()//a,b链表初始化
{
P *p;
char c='a';
p=&a;
printf("请输入第一个链表数据,数字之间空格间隔(例:2 3 4):\n");
while(c!='\n')
{
scanf("%d",&p->key);
c=getchar();
p->next=new P;
p=p->next;
}
p->next=NULL;
c='a';
p=&b;
printf("请输入第二个链表数据,数字之间空格间隔(例:4 5 6):\n");
while(c!='\n')
{
scanf("%d",&p->key);
c=getchar();
p->next=new P;
p=p->next;
}
p->next=NULL;
}
void fanzhuan(P *head)//链表翻转,成为降序(非升)
{
P *p,*q;
int temp;
q=head;
while(q->next!=NULL)
{
p=q;
while(p->next!=NULL)
{
if(p->key>q->key)
{
temp=p->key;
p->key=q->key;
q->key=temp;
}
p=p->next;
}
q=q->next;
}
}
void hebing(P *a,P *b)//链表合并再翻转
{
P *p,*r;
int temp;
r=&c;
p=a;
while(p->next!=NULL)
{
r->key=p->key;
r->next=new P;
r=r->next;
p=p->next;
}
p=b;
while(p->next!=NULL)
{
r->key=p->key;
r->next=new P;
r=r->next;
p=p->next;
}
r->next=NULL;
r=&c;
fanzhuan(r);
}
void display(P *p)
{
P *q;
q=p;
while(q->next!=NULL)
{
printf("%d ",q->key);
q=q->next;
}
printf("\n");
}
int main()
{
init();
P *p,*q;
p=&a;
fanzhuan(p);
printf("\n链表一反转后为:");
display(p);
p=&b;
fanzhuan(p);
printf("链表二反转后为:");
display(p);
p=&a;
q=&b;
hebing(p,q);
p=&c;
printf("两链表合并后的非升序列为:");
display(p);
}
#include<stdio.h>
#define NULL 0
typedef struct Pnode//定义节点
{
int key;
Pnode *next;
}P;
P a,b,c;//三个链表的头结点
void init()//a,b链表初始化
{
P *p;
char c='a';
p=&a;
printf("请输入第一个链表数据,数字之间空格间隔(例:2 3 4):\n");
while(c!='\n')
{
scanf("%d",&p->key);
c=getchar();
p->next=new P;
p=p->next;
}
p->next=NULL;
c='a';
p=&b;
printf("请输入第二个链表数据,数字之间空格间隔(例:4 5 6):\n");
while(c!='\n')
{
scanf("%d",&p->key);
c=getchar();
p->next=new P;
p=p->next;
}
p->next=NULL;
}
void fanzhuan(P *head)//链表翻转,成为降序(非升)
{
P *p,*q;
int temp;
q=head;
while(q->next!=NULL)
{
p=q;
while(p->next!=NULL)
{
if(p->key>q->key)
{
temp=p->key;
p->key=q->key;
q->key=temp;
}
p=p->next;
}
q=q->next;
}
}
void hebing(P *a,P *b)//链表合并再翻转
{
P *p,*r;
int temp;
r=&c;
p=a;
while(p->next!=NULL)
{
r->key=p->key;
r->next=new P;
r=r->next;
p=p->next;
}
p=b;
while(p->next!=NULL)
{
r->key=p->key;
r->next=new P;
r=r->next;
p=p->next;
}
r->next=NULL;
r=&c;
fanzhuan(r);
}
void display(P *p)
{
P *q;
q=p;
while(q->next!=NULL)
{
printf("%d ",q->key);
q=q->next;
}
printf("\n");
}
int main()
{
init();
P *p,*q;
p=&a;
fanzhuan(p);
printf("\n链表一反转后为:");
display(p);
p=&b;
fanzhuan(p);
printf("链表二反转后为:");
display(p);
p=&a;
q=&b;
hebing(p,q);
p=&c;
printf("两链表合并后的非升序列为:");
display(p);
}
更多追问追答
追问
可不可以麻烦你画个这个代码的流程图给我
追答
这都过了一个月了都。。。。。
我不知道你要什么样的流程图,这里面只有一个算法就是排序罢了,因为我是偷懒写的,后面一问或许是要求先排序再连接,但是我是先连接再排序,这样方便一点
所以我只画了这个排序算法的流程图,而且我word用的并不好,,抱歉了= =
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询