双向链表 电话簿管理
时间: 2024-02-15 08:54:30 浏览: 24
双向链表是一种数据结构,它在每个节点中存储了两个指针,一个指向前一个节点,一个指向后一个节点。这种链表可以从前向后或从后向前遍历。电话簿管理可以使用双向链表来实现,其中每个节点代表一个联系人,包含联系人的姓名和电话号码等信息。通过在双向链表中插入、删除和查找节点,可以方便地进行电话簿的管理。例如,可以使用双向链表来实现添加联系人、删除联系人、按姓名查找联系人、按电话号码查找联系人等功能。在实现电话簿管理时,双向链表的操作和方法可以用来添加、删除和查找联系人节点,从而实现电话簿的管理功能。
相关问题
双向链表实现学生管理系统
双向链表可以很好地实现学生管理系统。我们可以将每个学生作为一个节点,节点之间通过双向指针相连,这样便于在链表中进行增加、删除、查找、遍历等操作。
具体实现时,可以定义一个双向链表的结构体,包括节点指针、链表长度等信息,再定义一个学生信息的结构体,包括姓名、学号、年龄、性别等信息。然后通过操作链表来实现对学生信息的管理。
例如,我们可以定义如下的结构体:
```
// 学生信息结构体
typedef struct student {
char name[20]; // 姓名
char id[10]; // 学号
int age; // 年龄
char gender; // 性别
} Student;
// 双向链表节点结构体
typedef struct node {
Student data; // 学生信息
struct node *prev; // 指向前一个节点的指针
struct node *next; // 指向后一个节点的指针
} Node, *List;
```
然后就可以通过定义各种函数来实现对学生信息的增删改查等操作了。
双向链表实现图书管理系统
双向链表可以用来实现图书管理系统中的书籍列表。每个节点可以表示一本书,节点中存储该书的相关信息,并且可以通过前后指针实现节点之间的链接。
以下是一个简单的双向链表实现:
```c++
#include <iostream>
#include <string>
using namespace std;
// 书籍信息结构体
struct Book {
string title;
string author;
int year;
};
// 链表节点结构体
struct Node {
Book data;
Node* prev;
Node* next;
};
// 链表类
class BookList {
public:
BookList() : head(nullptr), tail(nullptr), size(0) {}
~BookList() {}
// 添加一本书
void addBook(Book book) {
Node* newNode = new Node();
newNode->data = book;
newNode->prev = tail;
newNode->next = nullptr;
if (tail) {
tail->next = newNode;
}
tail = newNode;
if (!head) {
head = newNode;
}
size++;
}
// 删除一本书
void removeBook(string title) {
Node* curr = head;
while (curr) {
if (curr->data.title == title) {
if (curr->prev) {
curr->prev->next = curr->next;
} else {
head = curr->next;
}
if (curr->next) {
curr->next->prev = curr->prev;
} else {
tail = curr->prev;
}
delete curr;
size--;
return;
}
curr = curr->next;
}
}
// 显示所有书籍
void displayBooks() {
Node* curr = head;
while (curr) {
cout << curr->data.title << " by " << curr->data.author << " (" << curr->data.year << ")" << endl;
curr = curr->next;
}
}
private:
Node* head;
Node* tail;
int size;
};
```
使用示例:
```c++
int main() {
BookList bookList;
bookList.addBook({"The Catcher in the Rye", "J.D. Salinger", 1951});
bookList.addBook({"To Kill a Mockingbird", "Harper Lee", 1960});
bookList.addBook({"1984", "George Orwell", 1949});
bookList.displayBooks();
bookList.removeBook("To Kill a Mockingbird");
bookList.displayBooks();
return 0;
}
```
输出:
```
The Catcher in the Rye by J.D. Salinger (1951)
To Kill a Mockingbird by Harper Lee (1960)
1984 by George Orwell (1949)
The Catcher in the Rye by J.D. Salinger (1951)
1984 by George Orwell (1949)
```