C语言编写
VC环境调试
#include <stdio.h>
#include <malloc.h>
typedef struct Node{
int id;
int age;
struct Node *next;
}LNode,*LinkList;
LinkList Create(int n){//n为链表长度//验证成功
LinkList p,r,list=NULL;
int a=005,b=16;
int i;
for(i=1;i<=n;i++){
p=malloc(sizeof(LNode));
p->id=a;
p->age=b;
p->next=NULL;
if(list==NULL)
list=p;
else
r->next=p;
r=p;
}
return(list);
}
LinkList InsertLink(LinkList list,int insertID,int insertAGE){//有序插入
LinkList p,r,q;
p=malloc(sizeof(LNode));
p->id=insertID;
p->age=insertAGE;
if(list==NULL)
list=p;
else
{
if(insertID<list->id)
{
p->next=list;
list=p;
}
else
{
q=list;
while(q&&insertID>=q->id)
{
r=q;
q=q->next;
}
p->next=q;
r->next=p;
}
}
p=list;
while(p)
{
//printf("%d,%d/n",p->id,p->age);//验证成功
p=p->next;
}
return(list);
}
int SearchLink(int idn,LNode *list)
{//查找
LinkList p=list;
int i;
if(list==NULL)
return(0);//空链表
else
{
i=1;
while(idn!=p->id)
{
p=p->next;
i++;
}
//printf("/n%d,%d,%d/n",p->id,p->age,i);//验证查找成功
return i;//返回位置
}
}
int Insert(LNode *list,int nid,int nage,int n)
{//指定位置插入
LinkList p,r=list;
int i;
if(n<=0)
return(-1);//n值出错
else
{
i=1;
while(i!=n&&r!=NULL)
{//查找结点
r=r->next;
i++;
}
if(i!=n)
{
return(-1);//n值过大
}
}
p=malloc(sizeof(LNode));
p->id=nid;
p->age=nage;
p->next=r->next;
r->next=p;
//printf("/n%d,%d/n",p->id,p->age);//验证成功
return 1;
}
void selectsort(LNode *list)
{//选择排序
LinkList p,q,r;//q用来指向id最小的结点
int t;
for(p=list;p!=NULL;p=p->next)
{
q=p;//假设待排序数中头一个是最小的
for(r=p->next;r!=NULL;r=r->next)
{//查找待排序数中最小值
if(r->id<q->id)
q=r;//指向查找的更小值
}
if(q->id!=p->id)
{//交换指针域的值
t=p->id;
p->id=q->id;
q->id=t;
t=p->age;
p->age=q->age;
q->age=t;
}
}
}
void main()
{
LinkList Create(int n);
LinkList InsertLink(LinkList list,int insertID,int insertAGE);
SearchLink(2,InsertLink(Create(1),002,18));
Insert(InsertLink(Create(1),002,18),002,19,1);
selectsort(InsertLink(Create(1),002,18));
}