将不同的单词保存到链表中 [英] Save distinct words into linked list

查看:23
本文介绍了将不同的单词保存到链表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基本上我这里有 2 个链表:list 和 distinct.有几组单词之前已保存到列表"结构中.打算编写一个程序来找到不同/唯一的单词并将其保存到不同"结构中.这是我到目前为止基于我对指针的概念所得到的.但是,当我尝试打印distinct"时,程序崩溃了 :( 如果我错了,请纠正我.

Basically I have 2 linked list here: list and distinct. There are a few set of words which have been saved earlier into the 'list' struct. Was gonna write a program that is gonna find the words that are distinct/unique and save it into the 'distinct' struct. Here is what I got so far based on my concept on pointers. However when I try to print 'distinct', the program crashes :( please correct me if I'm wrong.

struct list {
char string[50];
struct list *next;
};

struct distinct {
char string[50];
struct distinct *next; 
};

void checkdistinct() { 

 list *ori = NULL;
 distinct *copy = NULL;
 distinct *check = NULL;

if(ori == NULL && copy == NULL) { //first time.
    ori = ori->next;
    copy = copy->next;
    copy = (distinct*)malloc(sizeof(distinct));
    strcpy(copy->string, ori->string);
    ori = ori->next;
    copy = copy->next;
}
else {}

while(ori!=NULL) {
    check = check->next;

   while(check != NULL) {
    if(strcmp(ori->string, check->string)!=0) {
        check = check->next;
    }
    else {
        ori = ori->next;
        check = NULL;
    }

 }

    //only compare same casing words, for now.
    copy = (distinct*)malloc(sizeof(distinct));
    strcpy(copy->string, ori->string);
    ori = ori->next;
    copy = copy->next;      
 }
}

当我尝试在 main 中打印时,它会崩溃 :( 如果您需要额外的代码注释,请回复.谢谢!

When I try to print in main, it will crash :( please reply if you need extra comments for the codes. Thanks!

推荐答案

在您的代码中,distinct 不是变量的名称,而是结构的名称.您似乎误解了指针,希望这会有所帮助,尽管它与您的问题没有直接关系.

In your code, distinct is not the name of a variable but of a structure. You seem to have misunderstood pointers, hopefully this will help although it is not directly related to your question.

为了让代码看起来更简单,我省略了很多错误检查.

I've left out a lot of error checking to make the code look simpler.

typedef struct listnode {
    char string[50];
    struct listnode *next;
} list_node;

typedef struct listbase {
    list_node *head;
    int numberOfElements;
} list;

/* Add a new string at the start of the list
*/
void ListPrepend(list *myList, char *myString) {
    list_node *newNode = malloc(sizeof *newNode); /* create node to store string */

    strcpy(newNode->string, myString); /* copy string into node */
    newNode->next = myList->head;      /* New node now followed by whole list */
    myList->head = newNode;            /* List now starts with new node */
    myList->numberOfElements++;
}

/* Add a new string at the end of the list
*/
void ListAppend(list *myList, char *myString) {
    list_node *newNode = malloc(sizeof *newNode), /* create node to store string */
              *currentNode = myList->head; /* pointer to node so we can find the end */

    strcpy(newNode->string, myString); /* copy string into new node */
    newNode->next = NULL;              /* Nothing following this node */

    if ( myList->head == NULL ) {
        myList->head = newNode; /* we didn't have a start node so assign it */
    } else {
        /* if there is a next node, move to it */
        while ( currentNode->next != NULL ) {
            currentNode = currentNode->next;
        }
        /* there is no next node so add new node on the end */
        currentNode->next = newNode;
    }
    myList->numberOfElements++;
}

/* Show the list in order head to tail
*/
void ListDisplay(list *myList) {
    list_node *currentNode = myList->head;

    while ( currentNode != NULL ) {
        printf("%s
", currentNode->string);
        currentNode = currentNode->next;
    }
}

int main() {
    list distinct = {0}; /* Now there is a variable called distinct */
    char name[][20] = {"Lim Zheng Yue", "Monkey", "Dave"};

    ListAppend(&distinct, name[0]);
    ListAppend(&distinct, name[1]);
    ListPrepend(&distinct, name[2]);
    ListDisplay(&distinct);
}

这篇关于将不同的单词保存到链表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆