0

線形リンクリストを姓でソートしようとしていますが、クラッシュしています。また、アルゴリズムが正しく機能しているかどうかもわかりません。

誰かがクラッシュを止めて、リストをソートするアルゴリズムが機能しているかどうかを確認できますか?

void sort(NODEPTR *employees, int maxEmployees)
{
  int i = 0, j = 0, k = 0;
  NODEPTR p, q, pTrail = NULL, qTrail, temp;
  temp = (NODEPTR) calloc(1, sizeof(node));

  qTrail = *employees;
  q = (*employees)->next;
  for (i = 0; i < maxEmployees; i++)
  {

    p = *employees;

    while (p != q)
    {

      if (strcmp(p->lastName, q->lastName))
      {
        temp = q;
        qTrail = q->next;
        q = pTrail->next;

        temp = pTrail->next;
        pTrail = temp;

        p = q;
      }
      else
      {
        pTrail = p;
        p = p->next;
      }

    }
    qTrail = q;
    q = q->next;

    pTrail = NULL;
  }
  printf("%10s %10ss\n", "First", "Last");
  printf("%10s %10s\n", "-----", "----");

  for (i = 0; i < maxEmployees; i++)
  {
    printf("%10s %10ss\n", (*employees)->firstName, (*employees)->lastName);
  }
}

リンクされたリスト:

typedef struct node
{
  char firstName[11];
  char lastName[16];
  char gender;
  int tenure;
  char rate;
  float salary;
  struct node *next;
} node, *NODEPTR;
4

1 に答える 1

2

あなたの論理は間違っているようです:

strcmp()は3 つの値を返します。

  • 1最初の引数の値が > の場合
  • -12 番目の引数の値が > の場合
  • 0両方の引数の値が同じ場合。

あなたに基づいてstrcmp(p->lastName,q->lastName)ソートすることはできません。

strcmp()returnの場合のみ、位置を変更する必要があります1。のために-10それは部分的に行くべきelseです。

于 2013-07-05T09:53:16.710 に答える