在我正在編寫的程序中,我需要一個鏈表,所以它是一個相當具體的實現。它需要:添加節點到鏈表末尾的函數簽名問題
- 將節點添加到結束
- 刪除其數據的節點的能力的能力相匹配的指定值
的數據是一個CString,不超過20個字符在長度。我對C不是非常有經驗,並且因以下簽名void addToEnd(llist root, char entery[51])
而出現錯誤。我試圖用node
替換llist
,但是然後錯誤是「未知類型名稱節點」。我怎樣才能擺脫這一點?
這裏的所有示例代碼
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct node
{
char entery[51];
struct node* next;
} llist;
/*may be losing root address permanently*/
void addToEnd(llist root, char entery[51])
{
while(root->next != NULL)
root = root->next;
node last = malloc(sizeof(struct node));
root->next = last;
strcpy(last, entery);
}
int main()
{
struct node *root = malloc(sizeof(struct node));
root->next = NULL;
strcpy(root->entery, "Hello");
struct node *conductor = root;//points to a node while traversing the list
if(conductor != 0)
while(conductor->next != 0)
conductor = conductor->next;
/* Creates a node at the end of the list */
conductor->next = malloc(sizeof(struct node));
conductor = conductor->next;
if (conductor == NULL)
{
printf("Out of memory");
return EXIT_SUCCESS;
}
/* initialize the new memory */
conductor->next = NULL;
strcpy(conductor->entery, " world\n");
addToEnd(root, " at the");
addToEnd(root, " end");
/*print everything in list*/
conductor = root;
if(conductor != NULL)
{
while(conductor->next != NULL)
{
printf("%s", conductor->entery);
conductor = conductor->next;
}
printf("%s", conductor->entery);
}
return EXIT_SUCCESS;
}
有一件事我不清楚,是我見過的是他們typedef the struct。爲什麼?讓我詳細說明一下:你怎麼知道你是否想通過node
或struct node
。另外我並沒有真正看到這一點,struct node
並不比單一的typedef'd名稱長得多。
有了您的typedef,一個'llist'是一樣的'結構節點'... – Sinkingpoint
爲什麼過去的結構節點,節點是類型,爲什麼結構需要? – Celeritas
@Celeritas在'C'中,'struct node'是一個類型,但不是'node'。在其他語言如'C++'中,'somename'等價於'struct somename'。 – starrify