/**
单链表的基本操作
*/
#include<stdio.h>
#include<malloc.h>
typedef int DataType;
typedef struct node
{
DataType data;
struct node *next;
} node, *LinkList;
/**
创建空表:
*/
void Init_List(LinkList *L)
{
*L=(LinkList)malloc(sizeof(node));
(*L)->next=NULL;
}
/**
头插法:
*/
void InPut_FromHead_List(LinkList L)
{
node *s;
scanf("%d",&L->data);
int i;
for(i=0; i<L->data; i++)
{
s=(LinkList)malloc(sizeof(node));
scanf("%d",&s->data);
s->next=L->next;
L->next=s;
}
}
/**
尾插法:
*/
void InPut_FromTail_List(LinkList L)
{
node *s,*r=L;
scanf("%d",&L->data);
int i;
for(i=0; i<L->data; i++)
{
s=(node*)malloc(sizeof(node));
scanf("%d",&s->data);
r->next=s;
r=s;
}
r->next=NULL;
}
/**
输出:
*/
void OutPut_List(LinkList L)
{
node* q=L->next;
while(q!=NULL)
{
printf("%d ",q->data);
q=q->next;
}
putchar('\n');
}
/**
递归输入单链表:心情不错用递归写着玩,
写的不好不要喷啊。。
*/
LinkList Input(int n)
{
LinkList L=(LinkList)malloc(sizeof(node));
scanf("%d",&L->data);
if(n<=1) L->next=NULL;
else L->next=Input(n-1);
return L;
}
LinkList Create_List()
{
LinkList L=(LinkList)malloc(sizeof(node));
scanf("%d",&L->data);
if(L->data) L->next=Input(L->data);
else L->next=NULL;
return L;
}
/**
递归 逆序输出单链表:
怎么 正序输出 呢? 我知道但我不告诉你。
*/
void PostPrint_List(LinkList L)
{
L=L->next;
if(L==NULL) return ;
PostPrint_List(L);
printf("%d ",L->data);
}
/**
非递减 排序:
*/
void Sort_List(LinkList L)
{
node *p,*q;
DataType temp;
for(p=L->next; p!=NULL; p=p->next)
{
for(q=p->next; q!=NULL; q=q->next)
{
if(q->data < p->data)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
}
/**
判断是否为空:
*/
int IsEmpty_List(LinkList L)
{
return (L->next==NULL);
}
/**
查找:
*/
node* FindNode_List(LinkList L,DataType key)
{
node* q=L->next;
while(q!=NULL)
{
if(q->data==key)
return q;
q=q->next;
}
return NULL;
}
/**
删除:
*/
void Delete_List(LinkList L,int index)
{
node *s=L,*r;
int i=0;
while(s!=NULL&&i<index-1)
{
s=s->next;
i++;
}
r=s->next;
s->next=(s->next)->next;
free(r);
}
/**
增加:
*/
void Insert_List(LinkList L,int index,DataType key)
{
node *s=L,*new_s;
int i=0;
while(s!=NULL&&i<index-1)
{
s=s->next;
i++;
}
new_s=(node*)malloc(sizeof(node));
new_s->data=key;
new_s->next=s->next;
s->next=new_s;
}
int main()
{
// freopen("A.in","r",stdin);
// 测试数据 5 3 2 4 1 6
// node *q;
// Init_List(&q); // attention !!!!
//
// InPut_FromTail_List(q);
// // InPut_FromHead_List(q);
LinkList q=Create_List();
OutPut_List(q);
Sort_List(q);
OutPut_List(q);
PostPrint_List(q);
return 0;
}