c-链表实现



我正在尝试这个程序,它要求我们以各种方式更改一个单词。

例如,如果我们收到"MISSSIPPI"那么输出应该是

MISP(不重复出现的顺序)

ISPM(频率)

IMPS(字母顺序)

我能够按照字母顺序进行编码,也可以按照出现的顺序进行编码。我能够成功地运行字母顺序函数,但当它遇到CODEBLOCKS上的顺序函数时,代码有点挂起。

void ord()
{
    current = head1 ;
    while(current != NULL)
    {
      current1 = current -> next ;
      while(current1 != NULL)
      {
        if(current1 -> data == current -> data)
        {
           free(current1);
           current1 = current1 -> next ;
        }
        else
        current1 = current1 -> next ;
      }
      current = current -> next ;
    }
   ptr = head1 ;
   while(ptr != NULL)
   {
       printf("%c" , ptr->data) ;
       ptr = ptr -> next ;
   }
}

在这个函数中,current指向列表的头部,而current one指向头部的下一个。我增加当前值,并释放具有重复字母表的节点。我的问题是为什么代码必须停止?也为频率的事情提出一些逻辑。

提前感谢

我想问题出在这里。

if(current1 -> data == current -> data)
    {
       free(current1);
       current1 = current1 -> next ;
    }

在这里,你释放current1,然后推进它。

我的建议是,你应该使用一个临时指针来保持"current1"的位置,然后推进它或任何需要的东西。

MISP(不重复出现的顺序)

错误为:

if(current1 -> data == current -> data)
{
    free(current1); // use a temporary varaible and move to next node and free
    current1 = current1 -> next ;
}

ISPM(频率):想法很快。

取一个26大小的数组(因为字母表是26。例如:count[26]

  • 通过遍历链接列表来增加相应的字母表元素
  • 在遍历结束时,您将看到数组中出现的次数

例如元素A->增量A[0]++;

相关内容

  • 没有找到相关文章

最新更新