链表插入、删除、排序



很抱歉,这是一个很大的问题。我无法使以下C++工作,我总是收到一个错误,即在visual studio的代码中没有结构/类/联合。我应该按照字母顺序把书放进一个链表,但到目前为止,我的插入方法已经坏了。

    //********************************************************************
    //  BookList.cpp
    //
    //  Represents a collection of books.
    //*******************************************************************
    #include "BookList.h"
    //----------------------------------------------------------------
    //  Creates a new Book object and adds it to the end of
    //  the linked list.
    //----------------------------------------------------------------
    void BookList::add(Book *newBook) {
    BookNode *node = new BookNode(newBook);
    BookNode *current;
    if (head == NULL)
    head = node;
    else {
       current = head;
       while (current->next != NULL) {
           current = current->next;
       }
       current->next = node;
    }
    }
    char *BookList::getBookList(char *list) {
       list[0] = '';
       BookNode *current = head;
       while (current != NULL) {
          strcat( list, current->book->getBook() );
          strcat( list, "n" );
          current = current->next;
          }
       return list;
       }
    void BookList::insert(Book *newBook) {
        BookNode *node = new BookNode(newBook);
        BookNode *current;
        if (head == NULL) {
    head = node;
        }
        else {
            current = head;
            int result = *newBook.compareTo(current->book->getBook());
            if (result == -1) {
                current->next = node;
                }
            else {
                while (result == 1) {
                    current = current->next;
                    result = *newBook.compareTo(current->book->getBook());
        }
    current->next = node;
    }
    }
    }
    //********************************************************************
    //  BookList.h
    //
    //  Represents a collection of books.
    //*******************************************************************
    #include "Book.h"
    class BookNode {
       public:
          BookNode() { };
          BookNode(Book *theBook) {
             book = theBook;
             next = NULL;
          };
          friend class BookList;
       private:
          Book *book;
          BookNode *next;
    };
    class BookList {
       public:
          void add(Book *);
          char* getBookList(char *);
      void delet(Book *);
      void insert(Book *);
          BookList() {
          head = NULL;
          };
       private:
          BookNode *head;
     };
    #include <cstring>
    //********************************************************************
    //  Book.h
    //
    //  Represents a single book.
    //*******************************************************************
    class Book {
       public:
          Book (char *newTitle) {
             strcpy( title, newTitle );
          }
          int compareTo(Book *newBook) {
              int compvar;
                      compvar = strcmp(newBook->getBook(), title);
                      return compvar;
          }
          char *getBook() {
             return title;
          }
       private:
          char title[81];
       };

这个代码肯定有多个问题,所以任何人都能提供的任何帮助都是很棒的。提前感谢!

这行代码是错误的(两行看起来像这样):

int result = *newBook.compareTo(current->book->getBook());

如果取消引用,请在其周围使用括号:

int result = (*newBook).compareTo(current->book->getBook());

但为了更容易阅读,我建议:

int result = newBook->compareTo(current->book->getBook());

这应该向您展示了真正的问题:compareTo()需要一个Book对象,而getBook()返回一个char*。使用以下内容,它对我来说编译得很好。如果没有使用这些类的主函数,我无法告诉你你的代码是否在逻辑上正常工作,但现在它可以编译了。

为了进行比较,您确实应该重载Book.h中的相等运算符。希望这能有所帮助。

好吧,我突然想到的逻辑错误是,你从来没有说

node->next = current->next

之前

current->next = node

当然,有用于链表的STL库,在打印函数中没有边界检查(可能无论如何都应该使用std::string),而且这永远不会清理它分配的内存。。。但我想这是一个介绍编程任务。如果没有定义delet()方法,就无法实例化类。

在开始声明BookNode类之前,需要添加BookList类的正向声明,因为BookNode类的定义中有friend class BookList;行。

更改以下内容:

//********************************************************************
//  BookList.h
//
//  Represents a collection of books.
//*******************************************************************
#include "Book.h"
class BookNode {

到此:

//********************************************************************
//  BookList.h
//
//  Represents a collection of books.
//*******************************************************************
#include "Book.h"
class BookList;
class BookNode {

如果没有这一点,编译器将抱怨BookList不是一个结构/类/联合。

很明显,在完成此操作后,您必须消除代码中的其他编译器错误。

相关内容

  • 没有找到相关文章

最新更新