C语言的链表的快速排序问题,答得好我多给分!!

来源:百度知道 编辑:UC知道 时间:2024/06/23 14:45:30
我在做链表的排序,我想用快速排序的方法,但想了一个晚上,代码写了又改,改了又写,就是不行。哪位高手可以帮我一把。我已经定义好了:
void swap(LNode *i;LNode *j)
{
LNode *temp;
temp = i;
i = j;
j = temp;
}
LNode *queue(LNode *h)
{
LNode *left;
LNode *right;
Lnode *p;

}
我疑问的地方在于如何交换left—>data和right—>data的值,还有,如果left—>data比right—>data小,那指针应该怎么动?是移动left还是right?
我还有个问题,就是在按值查找的时候,如果找到了,那么我要把这个值输出怎么输出,是用printf吗?要是用的话用在哪里?怎么用?是不是要定义一个print array(打印指针)的函数?

问题1:如何交换left—>data和right—>data的值?
答:首先,定义一个交换函数,函数要用传引用调用(参数为指针变量),不能使用传值调用。
void swept(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
然后,调用这个函数: swept(left , right);
这样就实现了left->data和right->data的交换了。

问题2:如果left—>data比right—>data小,那指针应该怎么动?
答:要实现链表的排序,不是要移动指针,而是,改变那个指针地址所放的数字的数值,比如说,你发现left—>data比right—>data小,那就调用上面定义的swept(left,right)函数,来交换他们的值,这样其实就是实现了链表左边的值比右边的值大了。

问题3:按值查找时,找到后要怎么输出?
答:首先按值查找肯定要有循环的,循环体中肯定会有查找条件,条件肯定是用if表示的,那就在那个if语句里写输出语句就可以了,下面我简单模拟一下。
while(...)
{
if(y->data==要查找的数)
{
printf("%d",y->data);
}
}

基本上就这样了,呵呵,
链表的确是比较麻烦的一个东西,
不过我感觉以后用的不多,而且很多时候,我们根本没有想过它是链表,就想着它是很多连在一起的指针而已,考虑问题的角度都从指针出发就好了!

呵呵,祝你早点解决问题!
有问题的话,就留言,咱们再探讨!

你这个定义的queue我不知道是什么东西。
我给你一个思路,首先,只要链表节点定义好了,链表自然就可以建立了,其实表示一个链表只需要一个节点的指针。比如一个节点可以表示成节