我在C中编程基本上将一个节点添加到一个链表中,然后假设对它进行排序。该节点包含字符串,计数和指向下一个节点的指针。添加新节点时,它会通过并检查以确保没有包含该字符串的节点。如果有,它不会添加新节点,而是将计数加1。然后假设按递减顺序对其进行排序。
这是我的添加功能代码。
void ins(char s[])
{
NODE_T *temp = (NODE_T*)malloc(sizeof(NODE_T));
strcpy(temp->symbol, s);
NODE_T *loop = (NODE_T*)malloc(sizeof(NODE_T));
NODE_T *countCheck = (NODE_T*)malloc(sizeof(NODE_T));
if(head == NULL)
{
head = temp;
head->count = 1;
head->next = NULL;
}
else
{
loop = head;
while(loop != NULL)
{
if(strcmp(temp->symbol, loop->symbol) == 0)
{
loop->count++;
countCheck = head;
while(countCheck != NULL)
{
if(loop->count > head->count)
{
loop->next = head;
head = loop;
break;
}
countCheck = countCheck->next;
}
break;
}
else if(loop->next == NULL)
{
temp->count = 1;
loop->next = temp;
temp->next = NULL;
break;
}
else
loop = loop->next;
}
}
}
到目前为止,我只添加了一种方法来排序当前节点temp是否大于第一个节点。它正确排序,但是当我调用print函数时,它会以无限循环打印它。
以下是我声明节点,打印功能和我的主要代码。
typedef struct NODE
{
char symbol[10];
int count;
struct NODE *next;
} NODE_T;
NODE_T *head = NULL;
void prl()
{
NODE_T *temp = (NODE_T*)malloc(sizeof(NODE_T));
temp = head;
while(temp != NULL)
{
printf("%s %d\n", temp->symbol, temp->count);
temp = temp->next;
}
}
int main(void)
{
char command[3];
char string[10];
printf("Command: "); fflush(stdout);
scanf("%s", &command);
while(strcmp(command, "end") != 0)
{
if(strcmp(command, "ins") == 0)
{
scanf("%s", &string);
ins(string);
}
else if(strcmp(command, "prl") == 0)
{
prl();
}
printf("Command: "); fflush(stdout);
scanf("%s", &command);
}
return 0;
}
要使用main,请键入' ins apple'当它要求命令时,它会将计数为1的apple添加为节点。如果再次添加apple,它将仅将节点增加1。添加香蕉3次将使香蕉成为第一个节点,但是当我调用打印功能prl时,它会打印出来 香蕉3 苹果2 在无限循环中。
任何帮助都将不胜感激。