繁体   English   中英

链表实现

[英]Linkedlist implementation

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

例如,如果给我们“ MISSISSIPPI”,则输出应为

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 ;
   }
}

在此功能中,当前指向列表的开头,而当前一个指向列表的下一个。 我增加当前值一并释放具有重复字母的节点。 我的查询是为什么代码必须停止? 也为频率事物提出一些逻辑。

提前致谢

我猜问题出在这里。

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] ++;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM