typedef struct child {int count; char word[100]; inner_list*next;} child;
typedef struct parent
{ char data [100];
child * head;
int count;
parent * next; } parent;
void append(child **q,char num[100],int size)
{ child *temp,*r,*temp2,*temp3;
parent *out=NULL;
temp = *q;
temp2 = *q;
temp3 = *q;
char *str;
if(*q==NULL)
{ temp = (child *)malloc(sizeof(child));
strcpy(temp->word,num);
temp->count =size;
temp->next=NULL;
*q=temp;
}
else
{ temp = *q;
while(temp->next !=NULL)
{ temp=temp->next;
}
r = (child *)malloc(sizeof(child));
strcpy(r->word,num);
r->count = size;
r->next=NULL;
temp->next=r;
}
}
这是我的追加函数,我用它来添加元素到我的子列表。但我的问题是它只应附加一个字符串后跟的唯一值。这意味着:
Inputs : aaa bbb aaa ccc aaa bbb ccc aaa
追加应该采取行动:
For aaa string there should be a list like bbb->ccc(Not bbb->ccc->bbb since bbb is already there if bbb is coming more than one time it should be increase count only.)
For bbb string there should be list like aaa->ccc only
For ccc string there should be list like aaa only
我希望我能说清楚。有什么想法吗?请询问更多信息。
我所尝试的是检查使用新元素输入的先前元素。我有点失败了。
int search(child *p)
{
child *temp= (child *)malloc(sizeof(child));
int var =0;
char num[100];
temp = p;
strcpy(num,p->word);
while(temp->next!=NULL)
{
if(strcmp(temp->word,num)==0)
var =1;
temp=temp->next;
}
return var;
}
这是我到目前为止所尝试过的。使用此搜索功能,我将控制元素是否在此处。但它失败了。
答案 0 :(得分:1)
如果我理解正确,给出输入
aaa bbb aaa ccc aaa bbb ccc aaa
您希望父列表包含3个元素 - aaa
的子列表,bbb
的一个和ccc
的一个。
aaa
的列表应包含原始输入中aaa
后面的所有字符串,此处仅为bbb
和ccc
。它应该只包含一次,相应节点中的count
变量递增,以使bbb
的计数为2,ccc
的计数为1。
这是对的吗?如果是,请继续阅读。
for every string S in your input
{
if S is not associated with a child list in the parent
{
create a new child list associated with S at the end of the parent list
}
// now we have C, the child list we either found above or created
if there is a string S' after S
{
find the element S' in the child list C by iterating through it
if you don't find the element S', create/append it with count = 1
else when you find the element, increment its count
}
}
我认为这应该可以让你到达目的地。
答案 1 :(得分:0)
您需要为while循环添加另一个条件:
while(temp->next !=NULL)
基本上只需将其扩展为将当前迭代的值与输入值进行比较。如果两者相等,那么只需从append
返回。