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