visual C++ 使用C语言实现快速排序
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &x);
void ListCreate(LinkList x);
void PrintList(LinkList x);
void MergeList(LinkList LA,LinkList LB,LinkList LC);
void main()
{
LinkList LA=NULL;
LinkList LB=NULL;
LinkList LC=NULL;
InitList(LA);
InitList(LB);
InitList(LC);
printf("请输入A链表元素:\n");
ListCreate(LA);
printf("请输入B链表元素:\n");
ListCreate(LB);
MergeList(LA,LB,LC);
printf("归并后的链表元素是:\n");
PrintList(LC);
}
void InitList(LinkList &x)
{//初始化链表为它分配存储空间
x=(LinkList)malloc(sizeof(LNode));
x->next=NULL;
}
void ListCreate(LinkList x)
{//新建链表
int flag=0;
char c;
LinkList p=NULL,n=NULL;
p=x;
while(!flag)
{
p=x;flag=1;
while((c=getchar())!='\n')
{
if(isdigit(c))
{
InitList(n);
ungetc(c,stdin);
scanf("%d",&n->data);
n->next=p->next;
p->next=n;
p=p->next;
}
}
for(p=x->next;p->next!=NULL;p=p->next)
{
if(p->data>p->next->data)
{
printf("请按顺序输入!\n");
flag=0;
break;
}
}
}
setbuf(stdin,NULL);
}
void PrintList(LinkList x)
{
LinkList p;
for(p=x->next;p!=NULL;p=p->next)
{
printf("%d ",p->data);
}
printf("\n");
}
void MergeList(LinkList LA,LinkList LB,LinkList LC)
{
LinkList i=LA->next,j=LB->next;
LinkList p=LC;
while(i!=NULL&&j!=NULL)
{
if(i->data<j->data){
p->next=i;
i=i->next;
p=p->next;
}
else{
p->next=j;
j=j->next;
p=p->next;
}
}
if(i!=NULL)
{
p->next=i;
i=i->next;
p=p->next;
}
if(j!=NULL)
{
p->next=j;
j=j->next;
p=p->next;
}
}