数据结构(C语言版):基于线性表的图书信息管理

基于链式存储结构的图书信息表的创建和输出

定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。

#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];  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值