请问一以下这个结构应该怎么利用结构体以及指针完成呢?(可以提供一下注释吗,谢谢!)
补充一下,想使用二重链表来对音乐做一个排列,请问如何实现呢?
typedef struct _artist artist;
typedef struct _artist{
char name[20];
}artist;
typedef struct _song song;
typedef struct _song{
char name[30];
char singer[30];
song *a;
}song;
typedef struct _listNode *listPointer;
typedef struct _listNode{
song data;
listPointer link;
}ListNode;
我只做到这里,后面结构体之间的指针不知道该怎么弄
代码有些冗长,请见谅
#include <string>
struct Artist;
struct sNode;
struct Song;
//Artist 信息
struct Artist
{
std::string name; //名称
Artist* next; //下一个 artist
Artist* head; //首项 artist
sNode* tail; //对应 sNode
//--构造函数
//首项
Artist(std::string name, sNode* tail)
:
name(name),
tail(tail),
head(this)
{}
//其余
Artist(Artist* head, Artist* prev, std::string name, sNode* tail)
:
name(name),
tail(tail),
head(head)
{
prev->next = this;
}
};
//Snode 信息
struct sNode
{
sNode* next; //下一个 sNode
sNode* prev; //上一个 sNode
Song* song; //对应 Song
//--构造函数
sNode(sNode* next, sNode* prev, Song* song)
:
next(next),
prev(prev),
song(song)
{}
};
//Song 信息
struct Song
{
Artist* artist; //对应 Artist
std::string title; //标题
std::string path; //文件路径
int index; //索引
//--构造函数
Song(Artist* artist, std::string title, std::string path, int index)
:
artist(artist),
title(title),
path(path),
index(index)
{}
};
供参考:
#include <stdio.h>
#include <stdlib.h>
struct _Artist;
typedef struct _Song {
struct _Artist* artist;
char title[64];
char path[128];
int index;
}Song;
typedef struct _SNode {
Song song;
struct _SNode* next;
struct _SNode* prev;
}SNode;
typedef struct _Artist {
char name[64];
struct _Artist* next;
SNode* head;
SNode* tail;
}Artist;
定义俩个列表
1、artist作为一个列表,每个节点表示一位歌手,每个节点里有一个成员指针,指向该歌手所有的song;
2、song定义一个列表,同一个artist下的歌组成一个指针,指针放在artist成员变量里
struct ArtistNode {
string artist_name;
SoneNode * songs;
ArtistNode * next_artist;
};
struct SoneNode {
string sone_name;
SoneNode * next_song;
};
参照Linux内核链表实现