程序编写运行坏境为经典编译坏境VC++6.0。只不过时常卡死,让人郁闷的要死,其他方面还可以。
该程序主要涉及到C语言的指针,结构体和数据结构的链表,排序算法。多初学者有很大的帮助。我也是一个初学者,把自己的经验分享出来,仅供参考。若有不合适之处,还望大侠多多指点!
#include <stdio.h>;#include <malloc.h>
struct Node
{
int Num;
struct Node *Link;
};//定义结构体,Link表示指向下一个结点的指针
//用到的三个方法的声明
struct Node *CreateList(int TotalNum);//建立指定长度的链表
void DisplayTheList(struct Node * Head);//将链表显示出来
struct Node *Sort(bool IfAsc,struct Node *Head);//给链表排序,支持从小到大和从大到小排序
void main()
{
printf("Please inter the number you want:\n");
int TotalNum;
scanf("%d",&TotalNum);
printf("please enter %d Numbers\n",TotalNum);
struct Node* ListHead=CreateList(TotalNum);
DisplayTheList(ListHead);
DisplayTheList(Sort(false,ListHead));
}
struct Node *CreateList(int TotalNum)//将输入的数组成链表
{
struct Node *Head,*Tail,*node;
Head=NULL;
for(int i=0;i<TotalNum;i++)
{
if(i==0)
{
node=(struct Node *) malloc (sizeof(Node));
scanf("%d",&node->Num);
Head=node;
}
else
{
node=(struct Node *) malloc (sizeof(Node));
scanf("%d",&node->Num);
Tail->Link=node;
node->Link=NULL;
}
Tail=node;
}
return Head;
}
void DisplayTheList(struct Node * Head)
{
printf("The numbers you entered are:\n\n");
struct Node *Next=Head;
while(Next!=NULL)
{
printf("%d ",Next->Num);
Next=Next->Link;
}
}
struct Node *Sort(bool IfAsc,struct Node *Head)
{
struct Node *Next,*Now;
Now=Head;
Next=Head;
int Temp;
if(Head->Link!=Head)//如果不这样处理,单节点的时候会出错!
{
while(Now->Link!=NULL)
{
Next=Now->Link;
while(Next!=NULL)
{
if(IfAsc)
{
if(Next->Num <= Now->Num)
{
Temp=Next->Num;
Next->Num=Now->Num;
Now->Num=Temp;
}
}
else
{
if(Next->Num >= Now->Num)
{
Temp=Next->Num;
Next->Num=Now->Num;
Now->Num=Temp;
}
}
Next = Next->Link;
}
Now=Now->Link;
}
}
return Head;
}