建立一个链表然后由小到大依次输出链表的值
#include <stdio.h>
#include <stdlib.h>
//定义链表结构
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
//初始化链表
bool InitList(LinkList &L)
{
L=(LNode *)malloc(sizeof(LNode));
if(L==NULL) return false;
L->next=NULL; return true;
}
//用尾插法建表
LinkList list_TailInsert(LinkList &L)
{
InitList(L);
LNode *s,*r=L;
int x;
char a[100];
do
{
scanf("%s",&a);
if(a[0]=='@') break; //输入9999退出循环结束建表
x=atoi(a);
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
}while(1);
r->next=NULL;
return L;
}
/*
//删除表中值域重复的结点
LinkList DeleteList(LinkList &L)
{
LNode *p,*s,*q;
p=L->next;
while(p)//当p不为NULL
{
s=p;
q=p->next;
//从P后面的第一个结点q依次向后遍历
while(q)
{
if(q->data==p->data)
{
s->next=q->next;
free(q); //p与q的值相等,则s直接指向q的下一个结点,并释放q
q=s->next;//q指向s的下一个结点,相当于向后移一位
}
else
{
s=q;
q=q->next; //p不等于q,s和q都向后移一位
}
}
p=p->next;//p指向下一个结点,开始新的循环
}
return L;
}
*/
LinkList sort(LinkList &L)
{
LNode *p,*q,*min;
for(p=L->next;p!=NULL;p=p->next)
{
min=p;
for(q=p->next;q!=NULL;q=q->next)
if(q->data<min->data)
min=q;
if(min!=p)
{
int temp=p->data;
p->data=min->data;
min->data=temp;
}
}
return L;
}
int main()
{
LinkList L;//定义一个链表L
list_TailInsert(L);//建立一个链表
//DeleteList(L);//删除链表中值域重复的结点
sort(L);
//输出链表中结点的值
LNode *p;
p=L->next;
while(p)
{
printf("%d\t",p->data);
p=p->next;
}
}