现在的位置: 首页 > 综合 > 正文

一步一步复习数据结构和算法基础-单链表冒泡排序

2018年04月28日 ⁄ 综合 ⁄ 共 818字 ⁄ 字号 评论关闭

其实个人以为用单链表排序就是自己找麻烦,用数组排序多好啊,

但是转念一想,还是挑战一下自己吧,这个程序的声明和前几次的不同,但是仅仅是换汤不换药.

谨以此作为链表的练习吧.

#include<stdio.h>
#include<stdlib.h>
typedef int elem;
typedef struct node
{
	 elem data;
	struct node *link;
}lnode,*node;
void initlist(node l,int ms)
{
	node p;
	l->link = NULL;
	while(ms--)
	{
		p = (node)malloc(sizeof(lnode));
		scanf("%d",&p->data);
		p ->link = l->link;
		l->link = p;
	}
}
void bubble(node head)
{
	node pp,p,q,last;
	last = head;
	while(last->link!=NULL)
		last = last->link;                         //last指向链表末尾
	while(last!=head->link)                        //防止出现链表中只有一个元素的情况
	{
		pp = head;
		p = pp->link;
		while(p!=last)
		{
			q = p->link;
			if(p->data>q->data)
			{
				pp->link = q; p->link = q->link;
				q->link = p;
				if(last==q)last=p;
			}

			pp = (p->data < q->data)?p:q;
			p = pp->link;
		}
		last = pp;
	}
}
void travel(node l)
{
	while(l->link)
	{
		printf("%d ",l->link->data);
		l = l->link;
	}
}
int main()
{
	node l;
	int ms;
	scanf("%d",&ms);
	l = (node)malloc(sizeof(lnode));
	initlist(l,ms);
	bubble(l);
	travel(l);
	return 0;
}

 

抱歉!评论已关闭.