#include<stdio.h>
#include<malloc.h>
typedef int DataType;
typedef struct Node
{
DataType data; //数据域
struct Node *next; //指针域
}LNode;
void Initiate(LNode **head) //初始化
{
*head = (LNode *)malloc(sizeof(LNode)); //对头结点head 开辟空间
(*head)->next = NULL; //结束标志位NULL
}
int Length(LNode *head)
{
LNode *p = head; //P指向头结点
int size = 0; //size用来计算链表元素整个的长度 初始化为0
while(p->next != NULL)
{
p = p->next;
size++;
}
return size;
}
int Insert(LNode *head,int i,DataType x)
{
LNode *p,*q;
int j;
p = head ;
j = -1;
while (p->next != NULL && j < i-1)
{
p = p->next;
j++;
}
if(j != i -1)
{
printf("插入元素的位置参数有错");
return 0;
}
q = (LNode *)malloc(sizeof(LNode)); //生成 新节点
q->data = x; //给新节点赋值
q->next = p->next;
p->next = q;
return 1;
}
int Get(LNode *head,int i,DataType *x)//取链表元素
{
LNode *p;
int j;
p = head;
j = -1;
while(p->next != NULL && j < i)//若链表内无i位置的元素 则报错
{
p = p->next;
j++;
}
if(j != i)
{
printf("元素的参数有错!");
return 0;
}
*x = p->data;
return 1;
}
void Destory (LNode **head) //释放所有的结点
{
LNode *p,*pl;
p= *head;
while(p != NULL)
{
pl = p;
p = p->next;
free(pl);
}
*head = NULL;
}
int sort(LNode *head)// 对链表元素进行逆序排序
{
LNode *p;
p = head;
int temp;
if(p == NULL && p->next == NULL)
{
return 0;
}
int n = Length(head);
for(int i=1; i<n; i++)
{
p = head->next;
for(int j=0; j<n-i; j++)
{
if(p->data < p->next->data)
{
temp = p->data;
p->data = p->next->data;
p->next->data = temp;
}
p = p->next;
}
}
return 1;
}
int main()
{
LNode *head;//定义头指针的变量
int i, x, a;
Initiate(&head);
for(i = 0;i <5;i++)
{
scanf("%d",&a);
Insert(head,i,a);
}
sort(head);
for(i = 0;i < Length(head);i++)
{
Get(head, i, &x);
printf("%d\t",x);
}
Destory(&head);
}