列出C中的实现



我是一名C初学者,曾尝试过在C中实现列表,但当我编译代码时,我收到了错误"请求在非结构或联合中使用成员'words'"。我的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct data {
    char* word;
    struct data* next;
} DataT;
typedef struct node {
    int wordLength;
    struct node* prev, *next;
    DataT* words;
} NodeT;
typedef struct list {
    int length;
    NodeT* first , *last;
} ListT;

void insertWord(NodeT* Node, char* word) {
    if(!Node) || (!word) return;
    if(Node.words.word == NULL)
        Node.words.word = word;
    DataT* current = Node.words.next;
    while(current)
    {
        current = current.next;
    }
    (*current.next) = word;
}

函数实现中有几个错误

例如,if语句在语法上是错误的

if(!Node) || (!word) return;

我想你是指

if( !Node || !word ) return;

此声明

if(Node.words.word == NULL)
    Node.words.word = word;

也是错误的。应该是

if(Node->words->word == NULL)
    Node->words->word = word;

再次无效代码

DataT* current = Node.words.next;

应该有

DataT* current = Node->words->next;

这个说法是错误的

    current = current.next;

它应该看起来像

    current = current->next;

并且这个陈述是错误的

(*current.next) = word;

此外,在循环之后,电流将等于NULL。因此,即使您将正确写入current->next而不是current.next,您下一步也可能无法访问数据成员。

您的第一个错误来自if条件

if(!Node) || (!word) return;

你应该把它写成

if( !Node || !word ) return;

而不是使用点运算符,你应该使用"->"

正如你提到的,你是一个初学者,我想向你展示一个简单的链表实现。我也是一个初学者,我用这种方式实现了链表,这很简单。

#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node *next;
};
struct node *tail; //Which points to the last node
struct node *current;//used for traversing the list
struct node *new_node; //Newly allocated block of memory(node)
struct node *head; //Head of list

void create(int number){
new_node=(struct node *)malloc(sizeof(struct node));
new_node->next=NULL;
new_node->data=number;
if (head==NULL){
    head=new_node;
    tail=new_node;
}
else
    tail->next=new_node;
    tail=new_node;
    current=head;
}

int display(struct node *current){
current=head;
  printf("n");
  while(current!=NULL){
  printf("%d-->",current->data);
  current=current->next;
  }printf("NULLn");
  return 0;
  }

 int main(int argc, char const *argv[]){
 int number,choice;
 while(1){
    printf("n1.Creae Noden");
    printf("n2.Displayn");
    printf("n3.Exitnn");
    scanf("%d",&choice);
    switch (choice){
        case 1: printf("Enter number-->t");
            scanf("%d",&number);
            create(number);
            break;
        case 2: display(current);
            break;
        case 3: exit(-1);
    }   
    }       
return  0;
    }

我建议您在开始实现数据结构之前,先了解指针的动态、内存分配和结构。

相关内容

  • 没有找到相关文章

最新更新