链表排序c语言交换多个数据,C语言链表排序 如果输入的数据不是5个 不确定多少个 怎么弄?...

得分:20

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

我以前写的一个关于链表 创建 输入 排序的程序 你看看吧

#include

#include

#include

#include

int win;                      //用于存放节点个数//

struct s

{

int a;   //存放有效数据//

struct s *zzy;  //存放下一个节点的地址//

};

int main(void)

{

void lianbiao(struct s *tzz);

void pxlianbiao(struct s *tzz);

struct s *tzz=(struct s *)malloc(sizeof(struct s)); //定义链表的头指针,并存放分配新内存后的地址

lianbiao(tzz);         //调用创建链表函数

pxlianbiao(tzz);      //调用排序函数

getch();

return 0;

}

void lianbiao(struct s *tzz)  //创建创建链表函数//

{

void srlianbiao(struct s *tzz);

struct s *fplc=0,*syzz=tzz;  //分别定义存放内存地址存放指针和上一节点地址//

int i,n;

printf("输入需要创建链表节点个数:  ");

win:scanf("%d",&n);

if(n<0)

{

printf("输入非法!请重新输入:");

goto win;

}

win=n;

for(i=0;i

{

fplc=(struct s *)malloc(sizeof(struct s));  //分配内存到变量fplc//

if(fplc==0)            //判断内存分配是否正常 否者结束程序//

{

printf("分配内存错误!程序结束....");

exit(1);                         //结束程序//

}

syzz->zzy=fplc;

syzz=fplc;

}

if(n==1)

tzz->zzy=0;

else

fplc->zzy=0;

srlianbiao(tzz);              //调用输入函数//

}

void srlianbiao(struct s *tzz)

{

struct s *a=tzz;

int f;

for(f=0;a!=0;f++)

{

printf("请输入第%d个节点数据域的值:",f+1);

w:scanf("%d",&a->a);

if(a->a<0)

{

printf("输入错误!请重新输入:");

goto w;

}

a=a->zzy;

}

}

void pxlianbiao(struct s *tzz)

{

struct s *f=tzz,*i;

char r;int ns,jc=0;   //ns用来存放交换值,jc用来计次//

printf("排序后...\n");

if(win==1)

{

printf("一个节点无法排序!\n是否直接输出?(Y/N)");

fflush(stdin);

iii:scanf("%c",&r);

if(r=='Y'||r=='y')

printf("第1个节点的数据域的值为:%d",tzz->a);

else if(r=='N'||r=='n')

{

printf("程序结束...");

exit(1);

}

else

{

printf("输入错误!请重新输入:");

getchar();

goto iii;

}

}

else

{

while(f!=0)

{

jc=jc+1;

i=f->zzy;        //每一次内循环时让I指向F的下一节点//

while(i!=0)

{

if(f->aa)

{

ns=f->a;

f->a=i->a;    //交换数据域的值 //

i->a=ns;

}

i=i->zzy;       //指向下一节点//

}

printf("第%d个节点数据域的值为:%d\n",jc,f->a);

f=f->zzy;        //指向下一节点  //

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值