C 链表的结构数据类型问题

C 链表的结构数据类型问题,c,struct,linked-list,C,Struct,Linked List,嗨,我写了一个链接列表库,但我得到了这个错误和问题。我不知道该怎么办。如果我在第一个typedef结构listNode和第二个listNode中用list和listItem进行更改,然后在linked_列表中替换所有listNode和listItem,所有这些都可以正常工作,但我需要实现一个列表初始化功能,我想制作另一个存储列表标题和项目数的结构,我就做到了当我有这个错误的时候 链接列表.h代码: #ifndef linked_lists_h #define linked_lists_h #i

嗨,我写了一个链接列表库,但我得到了这个错误和问题。我不知道该怎么办。如果我在第一个typedef结构listNode和第二个listNode中用list和listItem进行更改,然后在linked_列表中替换所有listNode和listItem,所有这些都可以正常工作,但我需要实现一个列表初始化功能,我想制作另一个存储列表标题和项目数的结构,我就做到了当我有这个错误的时候

链接列表.h代码:

#ifndef linked_lists_h
#define linked_lists_h

#include <stdio.h>

struct listNode;

typedef struct listNode{

    int value;
    struct list *next;
}listNode;

struct listaa{

    int count;
    listNode *head;
};


void deleteFirst(listNode *head);
void display(listNode *head);
void addInFront (listNode *head, int value);
void addLast (listNode *head, int value);
void deleteLast(listNode *head);
void add_at_poz(listNode *head, int value, int poz);
void insert_at_poz(listNode *head, int value, int poz);
void delete_at_poz(listNode *head, int poz);
void max(listNode *head);
void min(listNode *head);

#endif /* linked_lists_h */
\ifndef链接列表\u h
#定义链接列表
#包括
结构列表节点;
类型定义结构列表节点{
int值;
结构列表*下一步;
}列表节点;
结构列表AA{
整数计数;
listNode*头;
};
void deleteFirst(列表节点*头);
无效显示(列表节点*头部);
void addInFront(列表节点*头,int值);
void addLast(列表节点*头,int值);
void deleteLast(列表节点*头);
void add_at_poz(列表节点*头,int值,int poz);
void insert_at_poz(listNode*head,int值,int poz);
void delete_at_poz(listNode*head,int poz);
最大无效值(列表节点*头部);
最小无效值(列表节点*头部);
#endif/*链接列表*/
链接列表.c代码:

#include "linked_lists.h"
#include "stdlib.h"

// Single Linked Lists

void display(listNode *head) { // Display a linked list.
    if(head->next != NULL){
        listNode *current;
        current = head;
        while (current->next != NULL) {
            current = current->next;
            printf("%d, ", current->value);
        }
    } else {
        printf("Lista este goala");
    }
    printf("\n");
}

//Adding value functions

// Adding in front of the list
void addInFront(listNode *head, int value) {
    listNode *new_item;
    new_item = (listNode *) malloc(sizeof(listNode));
    new_item->next = head->next;
    new_item->value = value;
    head->next = new_item;

    printf("Valoare %d a fost adaugata.\n", value);
}

// Adding at the end of the list
void addLast(listNode *head, int value) {
    listNode *new_item,*current = head;
    new_item = (listNode *) malloc(sizeof(listNode));
    while(current->next != NULL)
        current = current->next;
    new_item->value = value;
    new_item->next = NULL;
    current->next = new_item;

}


// Adding a new item at specified pozition
void add_at_poz(listNode *head, int value, int poz) {

    poz = poz - 1;
    int iter = 0;
    listNode *current = head, *new_item;

    while(iter < poz) {
        current = current->next;
        iter++;
    }

    new_item = (listNode *)malloc(sizeof(listNode));
    new_item = current->next;
    current->next = new_item;
    new_item->value = value;
}

// Insert a new item at specified pozition
void insert_at_poz(listNode *head, int value, int poz) {

    poz = poz - 1;
    int iter = 0;
    listNode *current = head, *new_item;

    while(iter < poz) {
        current = current->next;
        iter++;
    }

    new_item = (listNode *)malloc(sizeof(listNode));
    new_item->next = current->next;
    current->next = new_item;
    new_item->value = value;
}

// Remove items from list

// Remove first item
void deleteFirst(listNode *head) {
    listNode *deletedItem;
    deletedItem = head->next;
    printf("Elementul %d a fost sters din fata.\n", deletedItem->value);
    head->next = deletedItem->next;
    free(deletedItem);
}

// Delete last item
void deleteLast(listNode *head) {

    listNode *deletedItem, *current;

    current = head;
    while(current->next->next != NULL)
        current = current->next;

    deletedItem = current->next;
    printf("Ultimul elementul %d a fost sters\n",deletedItem->value);

    current->next = NULL;
    free(deletedItem);
}

void delete_at_poz(listNode *head,int poz) {

    int iter = 0;
    listNode *deletedItem, *current = head;
    poz = poz - 1;

    while(iter < poz) {
        current = current->next;
        iter++;
    }

    deletedItem = current->next;
    current->next = deletedItem->next;
    printf("Elementul de pe pozitia %d cu valoare %d a fost sters. \n", poz+1,deletedItem->value);
    free(deletedItem);
}

void max(listNode *head) {
    listNode *current;
    int max = head->next->value;

    current = head;
    while (current->next != NULL) {
        current=current->next;
        if(current->value > max)
            max = current->value;

    }
    printf("Maximul este %d.\n", max);
}

void min(listNode *head) {
    listNode *current;
    int min = head->next->value;

    current = head;
    while (current->next != NULL) {
        current=current->next;
        if(current->value < min)
            min = current->value;

    }
    printf("Minimul este %d.\n", min);
}
#包括“linked_list.h”
#包括“stdlib.h”
//单链表
无效显示(listNode*head){//显示链接列表。
如果(头部->下一步!=NULL){
listNode*当前;
电流=水头;
while(当前->下一步!=NULL){
当前=当前->下一步;
printf(“%d”,当前->值);
}
}否则{
printf(“Lista este goala”);
}
printf(“\n”);
}
//增值函数
//在列表前面添加
void addInFront(列表节点*头,int值){
listNode*新建_项;
新项目=(listNode*)malloc(sizeof(listNode));
新建项目->下一步=表头->下一步;
新建项目->值=值;
head->next=新项目;
printf(“Valoare%d a fost adaugata.\n”,值);
}
//在列表末尾添加
void addLast(listNode*头,int值){
listNode*新建_项,*当前=头;
新项目=(listNode*)malloc(sizeof(listNode));
while(当前->下一步!=NULL)
当前=当前->下一步;
新建项目->值=值;
新建项目->下一步=空;
当前->下一步=新项目;
}
//在指定位置添加新项目
void add_at_poz(列表节点*头,int值,int poz){
poz=poz-1;
int-iter=0;
listNode*current=head,*new_项;
while(iter下一步;
iter++;
}
新项目=(listNode*)malloc(sizeof(listNode));
新建项目=当前->下一步;
当前->下一步=新项目;
新建项目->值=值;
}
//在指定位置插入新项目
void insert_at_poz(listNode*头,int值,int poz){
poz=poz-1;
int-iter=0;
listNode*current=head,*new_项;
while(iter下一步;
iter++;
}
新项目=(listNode*)malloc(sizeof(listNode));
新建项目->下一步=当前->下一步;
当前->下一步=新项目;
新建项目->值=值;
}
//从列表中删除项目
//删除第一项
void deleteFirst(列表节点*头){
listNode*deletedItem;
deletedItem=头部->下一步;
printf(“元素%d是fata中的首个元素。\n”,deletedItem->value);
head->next=deletedItem->next;
自由(deletedItem);
}
//删除最后一项
void deleteLast(列表节点*头){
listNode*deletedItem,*当前;
电流=水头;
while(当前->下一步->下一步!=NULL)
当前=当前->下一步;
deletedItem=当前->下一步;
printf(“最后一个元素%d是最早的\n”,deletedItem->value);
当前->下一步=空;
自由(deletedItem);
}
void delete_at_poz(listNode*head,int poz){
int-iter=0;
listNode*deletedItem,*current=head;
poz=poz-1;
while(iter下一步;
iter++;
}
deletedItem=当前->下一步;
当前->下一步=删除数据项->下一步;
printf(“元素属性%d cu valoare%d fost sters.\n”,poz+1,删除项->值);
自由(deletedItem);
}
最大无效值(列表节点*头){
listNode*当前;
int max=头->下一步->值;
电流=水头;
while(当前->下一步!=NULL){
当前=当前->下一步;
如果(当前->值>最大值)
最大值=当前->值;
}
printf(“最大值%d.\n”,最大值);
}
最小无效值(列表节点*头){
listNode*当前;
int min=头部->下一步->值;
电流=水头;
while(当前->下一步!=NULL){
当前=当前->下一步;
如果(当前->值<最小值)
最小值=当前->值;
}
printf(“最小值%d.\n”,最小值);
}

我在这里看到的主要问题是
结构列表*下一步
在第一个typedef中,它应该是
struct listNode*next
。我不知道C提供的任何通用关键字
list

我在这里看到的主要问题是
struct list*next
在第一个typedef中,它应该是
struct listNode*next
。我不知道C提供的任何通用关键字
列表

发布的代码包含几个问题。让我们从头文件开始:

#ifndef linked_lists_h
#define linked_lists_h

#include <stdio.h>

struct listNode;

typedef struct listNode{

    int value;
    struct list *next;
}listNode;

struct listaa{

    int count;
    listNode *head;
};


void deleteFirst(listNode *head);
void display(listNode *head);
void addInFront (listNode *head, int value);
void addLast (listNode *head, int value);
void deleteLast(listNode *head);
void add_at_poz(listNode *head, int value, int poz);
void insert_at_poz(listNode *head, int value, int poz);
void delete_at_poz(listNode *head, int poz);
void max(listNode *head);
void min(listNode *head);

#endif /* linked_lists_h */
4) 函数原型中的参数列表都包含“不完整”的结构引用:

void deleteFirst(listNode *head);
void display(listNode *head);
void addInFront (listNode *head, int value);
void addLast (listNode *head, int value);
void deleteLast(listNode *head);
void add_at_poz(listNode *head, int value, int poz);
void insert_at_poz(listNode *head, int value, int poz);
void delete_at_poz(listNode *head, int poz);
void max(listNode *head);
void min(listNode *head);
原型需要使用“struct listNode”或键入typedef“listNode”

void deleteFirst  (ListNode *head);
void display      (ListNode *head);
void addInFront   (ListNode *head, int value);
void addLast      (ListNode *head, int value);
void deleteLast   (ListNode *head);
void add_at_poz   (ListNode *head, int value, int poz);
void insert_at_poz(ListNode *head, int value, int poz);
void delete_at_poz(ListNode *head, int poz);
void max          (ListNode *head);
void min          (ListNode *head);
请注意,垂直对齐提高了可读性

当然,所有实际的函数签名都需要同样的更正,以使用“typedef”名称,而不是“不完整”的结构定义

然后,您的头文件(不使用“stdio.h”头文件中的任何内容)不应包含该文件。而是将
#include
语句放在代码主体中

注意:在编写“#include”语句时。对于系统头文件,请使用以下格式:

#include <stdio.h>   <<- notice the `<` and `>`
    #include "linked_lists.h"  <<- notice the double quotes

#include发布的代码包含几个问题。让我们从头文件开始:

#ifndef linked_lists_h
#define linked_lists_h

#include <stdio.h>

struct listNode;

typedef struct listNode{

    int value;
    struct list *next;
}listNode;

struct listaa{

    int count;
    listNode *head;
};


void deleteFirst(listNode *head);
void display(listNode *head);
void addInFront (listNode *head, int value);
void addLast (listNode *head, int value);
void deleteLast(listNode *head);
void add_at_poz(listNode *head, int value, int poz);
void insert_at_poz(listNode *head, int value, int poz);
void delete_at_poz(listNode *head, int poz);
void max(listNode *head);
void min(listNode *head);

#endif /* linked_lists_h */
4) 函数prototy中的参数列表
void deleteFirst(listNode *head);
void display(listNode *head);
void addInFront (listNode *head, int value);
void addLast (listNode *head, int value);
void deleteLast(listNode *head);
void add_at_poz(listNode *head, int value, int poz);
void insert_at_poz(listNode *head, int value, int poz);
void delete_at_poz(listNode *head, int poz);
void max(listNode *head);
void min(listNode *head);
void deleteFirst  (ListNode *head);
void display      (ListNode *head);
void addInFront   (ListNode *head, int value);
void addLast      (ListNode *head, int value);
void deleteLast   (ListNode *head);
void add_at_poz   (ListNode *head, int value, int poz);
void insert_at_poz(ListNode *head, int value, int poz);
void delete_at_poz(ListNode *head, int poz);
void max          (ListNode *head);
void min          (ListNode *head);
#include <stdio.h>   <<- notice the `<` and `>`
    #include "linked_lists.h"  <<- notice the double quotes