C语言 创建单链表的算法

yizd12fk  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(184)

我有一个算法,应该从教科书中创建一个单链表。它几乎没有涉及任何例子,所以我需要一些帮助来弄清楚它(对C来说仍然是新的)
基本上,算法运行如下:

Algorithm: CREATE (HEAD, ITEM)
1. [Create NEW node]
a) Allocate memory for NEW node.
b) IF NEW = NULL then Print: “Memory not Available” and Return
c) Set NEW→DATA = ITEM
d) Set NEW→LINK = NULL
2. [Whether List is empty, head is the content of HEADER]
If HEAD = NULL then Set HEAD = NEW
3. Else
a) Set Temp = HEAD
b) While Temp→LINK ≠ NULL do
Set Temp = Temp→LINK
[End of while]
c) Set Temp→LINK = NEW
[End of IF]
4. Return

下面是我目前为止尝试的方法,但是我无法理解算法中的箭头Map。这些是现有的C特性吗?

#include <stdlib.h>
#include <stdio.h>

typedef struct node {
    int DATA;
    struct node * LINK;
} node_t;

node_t *create(int head, int item){
    node_t* new =  NULL;
    new = (node_t *)malloc(5*sizeof(node_t));
    if(new == NULL){
        prtinf("Memory not available");
        return -1;
    }
}
yacmzcpb

yacmzcpb1#

箭头运算符(->)用于使用指向结构的指针访问该结构的成员。它等效于使用点运算符(.)来存取结构的成员,但增加了取消指涉结构指标的步骤。例如,如果pstruct node的指标,那么p->DATA等于(*p).DATA
在您的代码中,您使用node_t typedef定义struct node类型。这意味着您可以使用node_t *引用指向struct node的指针,并且可以使用node_t->DATA访问由node_t指向的struct nodeDATA成员。
看起来您正在尝试实现算法的第一步,即为新节点分配内存并将ITEM值存储在节点的DATA成员中。您正在使用malloc为新节点分配内存,但是您需要初始化节点的DATA成员和LINK成员。您可以通过使用箭头操作符访问节点的成员来完成此操作:

node_t *create(int head, int item){
    node_t* new =  NULL;
    new = (node_t *)malloc(sizeof(node_t));
    if(new == NULL){
        printf("Memory not available");
        return -1;
    }

    new->DATA = item;  // Set the DATA member of the new node
    new->LINK = NULL;  // Set the LINK member of the new node to NULL
}

您还需要从create函数返回新节点,以便稍后在算法中使用它。

node_t *create(int head, int item){
    node_t* new =  NULL;
    new = (node_t *)malloc(sizeof(node_t));
    if(new == NULL){
        printf("Memory not available");
        return -1;
    }

    new->DATA = item;  // Set the DATA member of the new node
    new->LINK = NULL;  // Set the LINK member of the new node to NULL

    return new;  // Return the new node
}

然后,你可以使用create函数创建一个新节点,并将其存储在主程序的一个局部变量中,这样你就可以继续实现算法的其余部分。

int main() {
    int head = 0;  // The head of the linked list
    int item = 5;  // The data to store in the new node

    node_t *new_node = create(head, item);  // Create a new node

    // Continue implementing the rest of the algorithm...

    return 0;
}

相关问题