21xrx.com
2024-11-25 01:10:02 Monday
登录
文章检索 我的文章 写文章
C++ 实现链表按歌手名字查找歌曲
2023-07-06 18:24:41 深夜i     --     --
C++ 链表 查找 歌手名字 歌曲

在许多计算机科学和软件工程的应用中,链表都是常见的数据结构。链表是一种线性数据结构,它允许在任何位置插入或删除元素,而不需要改变其他元素的位置。在本文中,我们将讨论如何使用C++实现链表按歌手名字查找歌曲功能。

首先,我们需要定义一个结构体来表示一首歌曲。结构体包含歌曲名称,歌手名称,专辑名称和歌曲时长等字段。


struct Song

 string title;  // 歌曲名称

 string artist; // 歌手名称

 string album;  // 专辑名称

 int length;   // 歌曲时长

;

然后,我们需要定义另一个结构体来表示链表中的每个节点。每个节点包含一个Song结构体和一个指向下一个节点的指针。


struct Node {

 Song song;   // 歌曲信息

 Node* next;   // 指向下一个节点的指针

};

接下来,我们需要实现一个函数来搜索链表中的歌曲。函数将使用歌手名称作为参数,并返回包含该歌手名称的所有歌曲的链表。我们将其命名为findSongs。


Node* findSongs(Node* node, string artist) {

 Node* result = nullptr;  // 保存搜索结果的链表

 // 遍历链表

 while (node != nullptr) {

  if (node->song.artist == artist) {

   // 如果歌手名称匹配,则将当前歌曲添加到结果链表中

   Node* songNode = new Node();

   songNode->song = node->song;

   if (result == nullptr)

    result = songNode;

    else {

    Node* lastNode = result;

    while (lastNode->next != nullptr)

     lastNode = lastNode->next;

    

    lastNode->next = songNode;

   }

  }

  // 继续遍历下一个节点

  node = node->next;

 }

 // 返回包含所有搜索结果的链表

 return result;

}

在上面的代码中,我们首先创建一个指针result,用于保存搜索结果。然后,我们使用while循环遍历链表中的每个节点。如果节点中的歌曲包含与传递的歌手名称相同的歌手,则会将该歌曲添加到结果链表中。

最后,我们返回包含所有搜索结果的链表。

以下是一个完整的示例,演示如何使用链表按歌手名称搜索歌曲:


int main() {

 // 创建一些歌曲名称、歌手名称、专辑名称和歌曲时长等数据

 vector<Song> songs = {

   "Album 1",

  "Song 2",

  "Song 3",

   "Artist 3",

   190,

  "Song 6",

 };

 // 创建歌曲链表

 Node* head = nullptr;

 for (int i = songs.size() - 1; i >= 0; i--) {

  Node* node = new Node();

  node->song = songs[i];

  node->next = head;

  head = node;

 }

 // 查找歌手名称为“Artist 2”的歌曲

 Node* artist2Songs = findSongs(head, "Artist 2");

 // 打印搜索结果

 Node* node = artist2Songs;

 while (node != nullptr)

  cout << node->song.title << endl;

  node = node->next;

 

 return 0;

}

在上面的代码中,我们首先创建了一个包含多首歌曲的歌曲向量。然后,我们使用向量中的数据创建一个链表。

接下来,我们使用findSongs函数查找所有歌手名称为“Artist 2”的歌曲,并将结果保存在名为artist2Songs的链表中。

最后,我们使用while循环遍历并打印该链表中的歌曲名称。

在使用链表实现按歌手名字搜索歌曲的功能中,我们可以看到使用数据结构来解决问题的优点。链表提供了方便而强大的数据结构方案,能够实现多种不同的应用程序。如果你正在学习C++或数据结构,我希望本文能够对你有所帮助。

  
  
下一篇: C++ 求总和代码

评论区

{{item['qq_nickname']}}
()
回复
回复