链表归并成递减c语言,将递增有序单链表A和B归并成表C 递减单链表的尾插法建立和输出...

自己辛苦成果,拿出来帮助那些数据结构没学好和C语言基础差的人

#include

#include

typedef struct Node

{

int data;

struct Node *next;

}Node;

void Print(Node *HA,Node *HB,Node *HC);

void Choose(int choice,Node *HA,Node *HB,Node *HC);

void CreateChain(Node *H);

void PrintChain(Node *H);

void Combine(Node *HA,Node *HB,Node *HC);

void union_invert(Node *HA,Node *HB,Node *HC);

int main(void)

{

Node *HA;

Node *HB;

Node *HC;

HA=(Node *)malloc(sizeof(Node));

HB=(Node *)malloc(sizeof(Node));

HC=(Node *)malloc(sizeof(Node));

HA->next=NULL;

HB->next=NULL;

HC->next=NULL;

Print(HA,HB,HC);

while(true)

{

printf("按enter键继续操作...");

getchar();

getchar();

system("cls");

Print(HA,HB,HC);

}

return 0;

}

void Print(Node *HA,Node *HB,Node *HC)

{

int choice;

printf("---------------------\n");

printf("1.建立新的递增单链表A.\n");

printf("2.输出当前线性表A.\n\n");

printf("3.建立新的递增单链表B.\n");

printf("4.输出当前线性表B.\n\n");

printf("5.将表A和表B归并为表C.\n");

printf("6.输出当前线性表C.\n");

printf("---------------------\n");

printf("请选择你要的操作:");

scanf("%d",&choice);

Choose(choice,HA,HB,HC);

}

void Choose(int choice,Node *HA,Node *HB,Node *HC)

{

switch(choice)

{

case 1:

CreateChain(HA);

break;

case 2:

PrintChain(HA);

break;

case 3:

CreateChain(HB);

break;

case 4:

PrintChain(HB);

break;

case 5:

union_invert(HA,HB,HC)

;

break;

case 6:

PrintChain(HC);

break;

default:

exit(0);

}

}

void CreateChain(Node *H)

{

Node *s;

Node *p;

p=H;

int n;

int i;

while(true)

{

printf("请输入单链表长度:");

scanf("%d",&n);

if(n>0)

{

break;

}

else

{

printf("Error:单链表的长度必须大于零!\n");

}

}

while(true)

{

int flag;

printf("请输入单链表:\n");

H->next=NULL;

p=H;

for(i=0;i

{

s=(Node *)malloc(sizeof(Node));

scanf("%d",&s->data);

s->next=p->next;

p->next=s;

p=p->next;

}

p=H->next;

flag=1;

while(p->next!=NULL)

{

if(p->data<=p->next->data)

{

p=p->next;

}

else

{

flag=0;

printf("Error:建表非法!单链表必须为递增!\n");

break;

}

}

if(flag)break;

}

printf("成功创建新单链表!\n");

PrintChain(H);

}

void PrintChain(Node *H)

{

printf("当前单链表为:\n");

Node *p;

p=H->next;

if(p==NULL)

{

printf("空表\n");

}

else

{

while(p!=NULL)

{

printf("%d ",p->data);

p=p->next;

}

printf("\n");

}

}

void union_invert(Node *HA,Node *HB,Node *HC)

{ Node *pa=HA->next,*pb=HB->next,*C=HA,*r;

C->next=NULL;

while (pa && pb)

if (p

a->data<=pb->data)

{ r=pa->next;

pa->next=C->next;

C->next=pa;

pa=r;

}

else

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值