基于链式存储结构的图书信息表的创建和输出
定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书信息结构体
typedef struct Book {
char no[20];
char name[60];
double price;
struct Book *next;
} Book, *LinkList;
// 构造一个空的单链表
int InitList(LinkList *L) {
*L = (Book*)malloc(sizeof(Book));
if (*L == NULL) return 0;
(*L)->next = NULL;
return 1;
}
// 输入图书信息到链表
int Input(LinkList L, int *n) {
Book *p, *tail = L;
*n = 0; // 初始化书本数量为0
char inputNo[20];
char inputName[60];
double inputPrice;
while (1) {
scanf("%s %s %lf", inputNo, inputName, &inputPrice);
if (strcmp(inputNo, "0") == 0 && strcmp(inputName, "0") == 0 && inputPrice == 0.0) {
break;
}
p = (Book*)malloc(sizeof(Book));
if (p == NULL) return 0;
strcpy(p->no, inputNo);
strcpy(p->name, inputName);
p->price = inputPrice;
p->next = NULL;
tail->next = p;
tail = p;
(*n)++; // 增加书本数量
}
return 1;
}
// 输出链表中的图书信息
void PrintList(LinkList L, int n) {
printf("%d\n", n); // 首先输出书本数量
Book *p = L->next; // 从头节点的next开始遍历链表
while (p != NULL) {
printf("%s %s %.2f\n", p->no, p->name, p->price);
p = p->next;
}
}
// 释放链表内存
void FreeList(LinkList L) {
Book *p, *tmp;
p = L->next;
while (p != NULL) {
tmp = p;
p = p->next;
free(tmp);
}
free(L);
}
int main() {
LinkList L;
int n;
InitList(&L);
Input(L,&n);
PrintList(L, n);
FreeList(L);
return 0;
}
基于链式存储结构的图书信息表排序
定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据完成图书信息表的创建,然后将图书按照价格降序排序,逐行输出排序后每本图书的信息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define ERROR 0
typedef struct Book {
char no[20];
char name[60];