链表操作
问题:比较两个链表的长度,谁长合并时谁的第一个元素作为合并链表的第一个元素,然后对两个链表进行交叉合并,最后对合并后的链表进行排序。源代码:#include<stdlib.h>typedef struct node{int shuju;int geshu;struct node *next;}node;//结构体node *jianli(){node *p,*q,*..
·
问题:比较两个链表的长度,谁长合并时谁的第一个元素作为合并链表的第一个元素,然后对两个链表进行交叉合并,最后对合并后的链表进行排序。
源代码:
#include<stdlib.h>
typedef struct node
{int shuju;
int geshu;
struct node *next;}node;//结构体
node *jianli()
{
node *p,*q,*s;
q=(node*)malloc(sizeof(node));
p=q;
s=p;
q->geshu=0;
printf("0结束输入:");
scanf("%d",&q->shuju);
while(p->shuju!=0)
{s=p;
q->geshu++;
p=p->next;
p=(node*)malloc(sizeof(node));
scanf("%d",&p->shuju);
s->next=p;}
s->next=0;
return q;}//链表的建立
void shuchu(node *p)
{node *q;
q=p;
while(q!=0)
{printf("%d ",q->shuju);
q=q->next;}}//链表的输出
node *hebing(node *a,node *b)
{ node *p,*q,*s;
if(a->geshu>=b->geshu)
{p=a;
s=p;
q=b;
while(p!=0&&q!=0)
{s=s->next;
p->next=q;
p=p->next;
q=q->next;
p->next=s;
p=p->next;
}
return a;
}
else
{p=b;
s=p;
q=a;
while(p!=0&&q!=0)
{s=s->next;
p->next=q;
p=p->next;
q=q->next;
p->next=s;
p=p->next;
}
return b;}}//两个链表的合并
node *zhijiepaixu(node *c)
{int a[100],i=1,j,k;
node *p;
p=c;
while(p!=0)
{a[i++]=p->shuju;
p=p->next;
}
i--;
for(j=2;j<=i;j++)
{a[0]=a[j];
k=j-1;
while(a[0]<a[k])
{a[k+1]=a[k];
k--;
}
a[k+1]=a[0];
}
i=1;
p=c;
while(p!=0)
{p->shuju=a[i++];
p=p->next;
}
return c;
}//直接排序
node *selectsort(node *c)
{
int a[100],i=1,j,k,m;
int x;
node *p;
p=c;
while(p!=0)
{a[i++]=p->shuju;
p=p->next;
}
i--;
for(j=1;j<=i-1;++j)
{
k=j;
for(m=j+1;m<=i;++m)
if(a[m]<a[k])
k=m;
if(k!=j)
{
x=a[j];
a[j]=a[k];
a[k]=x;
}
}
i=1;
p=c;
while(p!=0)
{p->shuju=a[i++];
p=p->next;
}
return c;
}//简单选择
node *bubblesort(node *c)
{
int a[100],i=1,j,k;
int x;
node *p;
p=c;
while(p!=0)
{a[i++]=p->shuju;
p=p->next;
}
i--;
for(j=1;j<=i-1;++j)
{
for(k=1;k<=i-j;++k)
if(a[k]>a[k+1])
{
x=a[k];
a[k]=a[k+1];
a[k+1]=x;
}
}
i=1;
p=c;
while(p!=0)
{p->shuju=a[i++];
p=p->next;
}
return c;
}//冒泡排序
void main()
{node *a,*b,*c;
int d=6,e;
printf("----------------------------欢迎进入链表的操作--------------------------\n");
while(d==6)
{
printf("-----菜单-----\n1.输入链表\n2.合并链表\n3.直接排序\n4.简单选择排序\n5.冒泡排序\n");
scanf("%d",&e);
switch(e)
{
case 1:{printf("请输入第一个链表");a=jianli();printf("请输入第二个链表");b=jianli();break;}
case 2: {c=hebing(a,b);shuchu(c);break;}
case 3:{zhijiepaixu(c);shuchu(c);break;}
case 4:{c=selectsort(c);shuchu(c);break;}
default:{ c=bubblesort(c);shuchu(c);}
}
printf("\n继续操作请按6,结束操作请按7\n");
scanf("%d",&d);}
}
在这里插入代码片
操作页面:
第二张:
第一张:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)