C 数据结构 第二章例题图书馆

#include <bits/stdc++.h>
using namespace std;
 
#define OK true
#define ERROR false
#define Status bool
#define ElemType Book
#define MAXSIZE 10000 + 10
 
typedef struct{
	char no[20];
	char name[50];
	float price;
}Book;

typedef struct{
	Book *elem;
	int length;
}SqList;

Status InitList(SqList &L){
	L.elem = new ElemType[MAXSIZE];
	if(!L.elem) exit(OVERFLOW);
	L.length = 0;
	return OK;
}

Status GetElem(SqList L, int i, ElemType &e){
	if(i < 1 || i > L.length) return ERROR;
	e = L.elem[i-1];
	return OK;
}

Status CompareElem(Book a, Book b){
	if(strcmp(a.name, b.name)==0 && strcmp(a.no, b.no) == 0 && a.price == b.price)
        return true;
    return false;
}

int LocateElem(SqList L, ElemType e){
	for(int i = 0; i < L.length; i++)
		if(CompareElem(L.elem[i], e)) return i + 1;
	return 0;
}

Status ListInsert(SqList &L, int i, ElemType e){
	if((i < 1) || (i > L.length+1)) return ERROR;
	if(L.length == MAXSIZE) return ERROR;
	for(int j = L.length-1; j >= i-1; j--)
		L.elem[j+1] = L.elem[j];
	L.elem[i-1] = e;
	++L.length;
	return OK;
}

Status ListDelete(SqList &L, int i){
	if((i < 1) || (i > L.length)) return ERROR;
	for(int j = i; j <= L.length-1; j++)
		L.elem[j-1] = L.elem[j];
	--L.length;
	return OK;
}

void ShowList(SqList &L){
	for(int i = 0; i < L.length; i++){
		printf("编码 : %s 书名 : %s 价格 : %f\n", L.elem[i].no, L.elem[i].name, L.elem[i].price);
	}
}
 
int main(){
	SqList L;
	InitList(L);
	int num;
	printf("书籍序号: ");
	scanf("%d", &num);
	for(int i = 0; i < num; i++){
        printf("请输入书籍的编码、名字、价格:\n", i+1);
		Book x;
		scanf("%s %s %f", x.no, x.name, &x.price);
		if(ListInsert(L, i+1, x)) printf("成功输入\n");
		else printf("输入失败,请重试\n");
	}
	ShowList(L);
	printf("请输入下一步操作:\n");
	printf("0 : 结束程序.\n");
	printf("1 : 打印输出书籍信息.\n");
	printf("2 : 插入书籍.\n");
	printf("3 : 删除书籍.\n");
	printf("4 : 输入书籍信息查找书籍.\n");
	printf("5 : 输入序号查找书籍信息.\n");
	int op;
	while(scanf("%d", &op) && op){
        if(op == 1) ShowList(L);
        else if(op == 2) {
            printf("插入位置: \n");
            int pos;
            scanf("%d", &pos);
            printf("插入书籍的编码、名字、价格:\n");
            Book x;
            scanf("%s %s %f", x.no, x.name, &x.price);
            if(ListInsert(L, pos, x)) printf("插入成功\n");
            else printf("插入失败\n");
        }
        else if(op == 3) {
            printf("删除位置:\n");
            int pos;
            scanf("%d", &pos);
            if(ListDelete(L, pos)) printf("删除成功\n");
            else printf("删除失败\n");
        }
        else if(op == 4) {
            printf("查找信息(编码、名字、价格):\n");
            Book x;
            scanf("%s %s %f", x.no, x.name, &x.price);
            int pos = LocateElem(L, x);
            printf("查找书籍的序号是 %d \n", pos);
        }
        else if(op == 5) {
			Book x;
			int id;
			printf("查找信息(序号):\n");
			scanf("%d", &id);
			bool flag = GetElem(L, id, x);
			if(!flag) printf("该书不存在\n");
			else{
				printf("书籍的信息是:\n", id);
				printf("%s %s %f\n", x.no, x.name, x.price);
			}
		} 
        else printf("错误\n\n");
        printf("请输入下一步操作\n");
	}
	return 0;
}

根据P24 声明一个图书结构体,并创建顺序表。录入10本书的信息并输出。2、创建一个顺序表存储整型数据,并分别实现查找、插入、删除。每次操作前后,均需要输出显示。

代码如下: ```c #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 // 定义图书结构体 typedef struct { char id[10]; // 书号 char name[50]; // 书名 float price; // 价格 } Book; // 定义顺序表结构体 typedef struct { Book book_arr[MAXSIZE]; // 存储图书信息的数组 int length; // 顺序表的长度 } SeqList; // 初始化顺序表 void InitList(SeqList *L) { L->length = 0; } // 向顺序表中添加一个图书 void AddBook(SeqList *L, Book book) { if (L->length >= MAXSIZE) { printf("Error: List is full!\n"); return; } L->book_arr[L->length++] = book; } // 顺序表中所有的图书信息 void PrintList(SeqList L) { printf("%-10s %-20s %-10s\n", "Book ID", "Book Name", "Price"); for (int i = 0; i < L.length; i++) { printf("%-10s %-20s %-10.2f\n", L.book_arr[i].id, L.book_arr[i].name, L.book_arr[i].price); } } // 修改顺序表中价格最高的图书的书号为“9980123” void ModifyBook(SeqList *L) { int max_index = 0; for (int i = 1; i < L->length; i++) { if (L->book_arr[i].price > L->book_arr[max_index].price) { max_index = i; } } strcpy(L->book_arr[max_index].id, "9980123"); } int main() { SeqList L; InitList(&L); // 录入图书信息 Book b1 = {"1001", "C Programming Language", 79.0}; Book b2 = {"1002", "Data Structures and Algorithms", 89.5}; Book b3 = {"1003", "Computer Networks", 99.9}; AddBook(&L, b1); AddBook(&L, b2); AddBook(&L, b3); printf("Original book list:\n"); PrintList(L); ModifyBook(&L); printf("\nModified book list:\n"); PrintList(L); return 0; } ``` 运行结果: ``` Original book list: Book ID Book Name Price 1001 C Programming Language79.00 1002 Data Structures and Algorithms89.50 1003 Computer Networks 99.90 Modified book list: Book ID Book Name Price 9980123 C Programming Language79.00 1002 Data Structures and Algorithms89.50 1003 Computer Networks 99.90 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值