21xrx.com
2025-06-15 06:12:19 Sunday
登录
文章检索 我的文章 写文章
C++ 实现链表按歌手名字查找歌曲
2023-07-06 18:24:41 深夜i     18     0
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++ 求总和代码

评论区