标题:请问这个排序错在哪里
只看楼主
foreverman99
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-2-22
 问题点数:0 回复次数:0 
请问这个排序错在哪里
最近编了一道用快速排序法建立双向链表,有11处错误,但限于C的水平未能发现,请高手指教
程序如下;
#define NULL 0

typedef struct Node

{
  int key;
  int Data;
  struct Node *Pre;
  struct Node *Next;

} Node,*Linklist;

main()

{
  Linklist Head,Tail;
  int Lenth;
  Head=Tail=(Linklist)malloc(sizeof(Node));
  printf("How many do you want?/n");
  scanf("%d",&Lenth);
  CreateLinklist(Lenth,Tail,Head);
  QuickSort(Head,Tail);
  PrintLinklist(Head);

}

void CreateLinklist(int n,Linklist Tail,Linklist Head)

{
  Linklist L,p,H;
  int i=0;
  H=L=p=(Linklist)malloc(sizeof(Node));
  H->Pre=NULL;
  while(n!=NULL)

    {

      scanf("%d",&n);
      p->key=i++;
      p->Data=n;
      L->Next=p;
      p->Pre=L;

    }

  p->Next=NULL;
  Tail=p;
  Head=H;

}

void NodePreMove(Linklist *q)

{
     Linklist T=(Linklist)malloc(sizeof(Node));
     T=q->Pre;
     free(q);
     q=T;
}

void NodeNextMove(Linklist *p)

{
     Linklist T=(Linklist)malloc(sizeof(Node));
     T=p->Next;
     free(p);
     p=T;
}

void Partition(Linklist *low,Linklist *high)

{
  int T;
  Linklist p=(Linklist)malloc(sizeof(Node));
  Linklist q=(Linklist)malloc(sizeof(Node));
  Linklist Temp=(Linklist)malloc(sizeof(Node));
  Linklist Pivotkey=(Linklist)malloc(sizeof(Node));
  p=Temp=Pivotkey=low;
  q=high;

  while (p < q)
    {
        while (p->Data < q->Data && q->Data >= Pivotkey->Data)   NodePreMove(q);

        T=q->Data;
        q->Data=p->Data;
        p->Data=T;

        while (p->Data < q->Data && p->Data <= Pivotkey->Data)   NodeNextMove(p);

        T=q->Data;
        q->Data=p->Data;
        p->Data=T;
     }

  p = Temp;
  return p;
}



void QuickSort(Linklist *low,Linklist *high)
{
  if (low < high)
     {

       Linklist pivotloc = Partition(low, high);
       qSort(low,NodePreMove(pivotloc));
       qSort(NodeNextMove(pivotloc), high);

      }
}



void PrintLinklist(Linklist *Head)
{
   Linklist Temp;
   printf("The Linklist: ");
   do
     {
       printf("%d  ",p->data);
       Temp=p->Next;
       free(p);
       p=Temp;
      }
   while(p!=NULL);
}
搜索更多相关主题的帖子: Node Tail Head int Lenth 
2008-02-22 21:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-200666-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.801980 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved