您的位置:首页 > 其它

用双向链表对整形数据进行排序

2011-07-11 10:42 288 查看
#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
typedef struct node
{
struct node *prev;
struct node *next;
int Data;
}link,*pLink;
pLink InitLink();
pLink GetTail(pLink head,int num);
void PrintLink(pLink head);
void SortLink(pLink head,pLink tail);
int LinkNum(pLink head);
int main()
{
pLink head,tail;
head = InitLink();
int num = 0;
num = LinkNum(head);
tail = GetTail(head,num);
SortLink(head,tail);
PrintLink(head);
}
pLink InitLink()
{
pLink head,p,n;
int x,cycle;
head = (pLink)malloc(sizeof(link));
p = head;
cycle = 1;
while(cycle)
{
printf("please enter data:\n");
scanf("%d",&x);
if(x != 0)
{
n = (pLink)malloc(sizeof(link));
n->Data = x;
p->next = n;
n->prev = p;
p = n;
}
else
{
cycle = 0;
}
}
head = head->next;
head->prev = NULL;
p->next = NULL;
return head;
}
void SortLink(pLink head,pLink tail)
{
pLink q,p,flag;
q = (pLink)malloc(sizeof(link));
p = (pLink)malloc(sizeof(link));
flag = (pLink)malloc(sizeof(link));
flag = head;
p = tail;
q = NULL;
int t;
while (flag != NULL)
{
flag = NULL;

for (q = head; q != p; q = q->next)
{
if ((q->Data) > (q->next->Data))
{
t = q->Data;
q->Data = q->next->Data;
q->next->Data = t;

flag = q;
}
}

p = flag;
}
}
int LinkNum(pLink head)
{
int sum = 0;
pLink p;
p = head;
while(p != NULL)
{
p = p->next;
sum++;
}
return sum;
}
pLink GetTail(pLink head,int num)
{
pLink p,q;
int sum = 0;
q = (pLink)malloc(sizeof(link));
p = (pLink)malloc(sizeof(link));
p = head;
while(p != NULL)
{
sum++;
p = p->next;
if(num-1 == sum)
{
return p;
}

}
}
void PrintLink(pLink node)
{
pLink q;
printf("Now the link: ");
do
{
q=node;
printf("%d ",node->Data);
node=node->next;
free(q);
}
while(node!=NULL);
getch();
}
初学咋练,多多指教
估计名字起得不是很合理,我后面会进行改写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: