簡體   English   中英

如何在C中使用結構?

[英]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是一種類型,就像intFILEchar ,它是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM