自己辛苦成果,拿出来帮助那些数据结构没学好和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