[英]How to use a struct in C?
這是C編程語言中鏈表的代碼。
#include <stdio.h> /* For printf */
#include <stdlib.h> /* For malloc */
typedef struct node {
int data;
struct node *next; /* Pointer to next element in list */
} LLIST;
LLIST *list_add(LLIST **p, int i);
void list_remove(LLIST **p);
LLIST **list_search(LLIST **n, int i);
void list_print(LLIST *n);
代碼尚未完成,但我認為足以解決我的問題。 在此,使用結構節點“ LLIST”的末尾,並且在函數list_add
的原型中還將其用作返回類型。 到底是怎么回事?
那是一個typedef
。 實際上,它同時執行兩項操作。 首先,它定義一個結構:
struct node {
int data;
struct node *next;
}
然后執行typedef
:
typedef struct node LLIST;
這意味着LLIST
是一種類型,就像int
或FILE
或char
,它是struct node
(鏈接列表節點結構)的簡寫。 沒必要-您可以在所有這些位置上用struct node
替換LLIST
但這使它更易於閱讀,並幫助討厭的最終用戶隱藏實現。
LLIST只是已創建結構的另一個類型名稱。 通常,以下格式將創建類型“ NAME”,即“ struct x”:
typedef struct x { ... } NAME;
C要求您引用帶有“ struct”前綴的結構,因此通常引入typedef以減少冗長的提及。
也就是說,結構的聲明包含兩個部分,可以這樣重寫:
struct node {
int data;
struct node *next; /* pointer to next element in list */
};
typedef struct node LLIST;
因此, LLIST
只是struct node
別稱(感謝Chris Lutz)。
typedef
在您的程序中創建一個新的“類型”,因此這些函數的返回值和參數類型僅是您的結構。 它只是將struct node
用於類型的簡寫。
如果要創建一個新節點,則可以這樣做(使用類型):
LLIST *node = malloc(sizeof(LLIST));
node->data = 4;
node->next = someOtherItem;
list_add(node, 1)
另外,有了問題原型中的函數原型,您實際上就不需要雙指針了。 由於結構中的數據只是一個int
,因此您可以執行以下操作
LLIST *list_add(int data, int position);
然后list_add
函數將處理分配,將int
復制到struct並將其添加到鏈接列表。
將其放在某個位置就像將它之前的節點中的next
指針更改為新分配的節點的地址,然后將新節點中的next
指針指向next
指針(該節點之前的節點)一樣簡單。一個人最初指向)。
請記住(考慮到其余的函數原型),必須刪除所有創建的節點的指針。
我不確定我是否了解搜索功能的工作方式。 這整個事情可以更好地實現。 創建節點時,您不必提供節點的位置(如果指定的數字大於節點數,該怎么辦?)等等。
LLIST*
是指向由LLIST
結構定義的結構的指針。
你應該做
LLIST* myList = malloc(sizeof(LLIST)*number_of_elements);
為該列表分配一些內存。 添加和刪除項目需要您使用realloc重新分配內存。 我已經為列表(用數組制作)寫了一些代碼。
我可能會在回家后立即發布代碼,目前情況並非如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.