得分:20
我以前写的一个关于链表 创建 输入 排序的程序 你看看吧
#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; //指向下一节点 //
}
}
}