C语言版 数据结构 分别定义初始化单链表,前插法创建单链表,在单链表中按照书名查找该书,在指定某本书前插入一本新书,删除单链表中指定的某本书,求出图书馆中图书的总价值6个函数,在主函数中调用这6个函数,实现求出广西职师院图书馆图书总价值。
时间: 2024-10-15 09:07:55 浏览: 18
在C语言中,我们可以使用结构体和指针来实现单链表数据结构。以下是六个相关的函数:
1. **定义单链表节点**:
```c
typedef struct ListNode {
char bookName[50];
float value;
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
```
2. **初始化单链表**:
```c
ListNode* createList() {
ListNode* head = NULL;
return head;
}
```
3. **前插法创建单链表** (假设有一个数组bookData存储了书名和价值):
```c
void insertFront(ListNode* head, char* bookName, float value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->bookName = bookName;
newNode->value = value;
newNode->next = head;
head = newNode;
}
```
4. **按书名查找**:
```c
ListNode* searchBook(ListNode* head, char* bookName) {
while (head != NULL) {
if (strcmp(head->bookName, bookName) == 0)
return head;
head = head->next;
}
return NULL;
}
```
5. **在某本书前插入**:
```c
void insertBeforeBook(ListNode* head, ListNode* target, char* newBookName, float newValue) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->bookName = newBookName;
newNode->value = newValue;
newNode->next = target->next;
target->next = newNode;
}
```
6. **删除单链表中指定的书**:
```c
void deleteBook(ListNode** head, char* bookName) {
ListNode* prev = *head;
ListNode* current = *head;
while (current != NULL && strcmp(current->bookName, bookName) != 0) {
prev = current;
current = current->next;
}
if (current != NULL) {
if (prev == *head)
*head = current->next;
else
prev->next = current->next;
free(current);
}
}
```
7. **计算图书总价值**:
```c
float calculateTotalValue(ListNode* head) {
float total = 0.0;
ListNode* temp = head;
while (temp != NULL) {
total += temp->value;
temp = temp->next;
}
return total;
}
```
在主函数`int main()`中,你可以先调用`createList()`初始化链表,然后根据需要调用其他函数操作链表,最后通过`calculateTotalValue(head)`获取总价值。
阅读全文