今天在做一个“字符统计”的程序,
在对结果排序之后存放的过程中,我采用用单向链表记录,而其中感觉困惑的地方就是
在下面代码中添加的注释部分,不过感觉这个程序还是不太“利落”
希望和各位高手交流交流

源代码如下:
注: sort函数的主要过程是两层循环,内层循环遍历array数组并从中取最大的那个添加到单向链表中,取完之后将数组中对应的元素置0
struct LIST
{
  char c;
  short n;
  LIST* next;
};
LIST* sort(short* array, int length)  
{
  LIST* p = NULL;
  LIST* q = NULL;
  LIST* t = NULL;
  LIST HEADER;   //这里需要说明一下使用“头”的原因,这样可以避免在循环过程中
          //添加判断语句if(i==0){ p = q;},
          //否则必须要让q在第一次得到分配的内存后 进行p = q 初始化
          //这样就增添了循环过程的复杂度,主要不利于处理器的“预存取指令”
          //的工作方式
          //当然,不用“头”也行,那需要一开始就malloc()一个头,
          //不过这样由于调用了函数,还是比较麻烦的
          //能有什么方法解决这个问题呢?

  int temp = 0;
  int mark = 0;
  
  p = t = &HEADER;

  for(int i=0; i<length; i++)
  {
    temp = array[0];
    mark = 0;
    for(int j=1; j<length; j++)
    {
      if(temp < array[j])
      {
        temp = array[j];
        mark = j;
      }
    }

    if(temp == 0 && q == NULL)
        return NULL;
    if(temp == 0 && q != NULL)
        break;
    q = (LIST*)malloc(sizeof(LIST));
    q->c = 'a' + mark;
    q->n = temp;
    q->next = NULL;
    
    //if(i == 0)
    //{ p = q;}    
    
           t->next = q;
    t = q;

    
    array[mark] = 0;
  }

    return p;

}