题目描述
建立一个长度为n的带头结点的双向链表,使得该链表中的数据元素递增有序排列。(必须使用双向链表完成,数据类型为整型。)
输入
第一行:双向表的长度;
第二行:链表中的数据元素。
输出
输出双向链表中的数据元素的值。
样例输入
10
2 4 6 3 5 8 10 21 12 9
样例输出
2 3 4 5 6 8 9 10 12 21
参考程序
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
struct LNode *pre;
int data;
struct LNode *next;
}Double_Link_Node;
Double_Link_Node *Creat(int n)
{
Double_Link_Node *head=(Double_Link_Node *) malloc (sizeof(Double_Link_Node));
head->pre=NULL;
head->next=NULL;
Double_Link_Node *p, *q;
q=head;
while(n!=0)
{
p=(Double_Link_Node *) malloc (sizeof(Double_Link_Node));
scanf("%d", &p->data);
q->next=p;
p->pre=q;
p->next=NULL;
q=p;
n--;
}
return head;
}
Double_Link_Node *Sort(Double_Link_Node *head)
{
int temp;
Double_Link_Node *p, *q, *min;
for(p=head->next; p->next!=NULL; p=p->next)
{
min=p;
for(q=p->next; q!=NULL; q=q->next)
{
if(min->data>q->data)
min=q;
}
if(min!=p)
{
temp=min->data;
min->data=p->data;
p->data=temp;
}
}
return head;
}
int main()
{
int n;
scanf("%d", &n);
Double_Link_Node *head=Creat(n);
Double_Link_Node *Sort_head=(Double_Link_Node *) malloc (sizeof(Double_Link_Node));
Sort_head=Sort(head);
Double_Link_Node *p=Sort_head->next;
while(p!=NULL)
{
printf("%d ", p->data);
p=p->next;
}
return 0;
}
注意
该程序仅供学习参考!