编程题实训-基于顺序表的图书信息管理Python版

第1关:基于顺序存储结构的图书信息表的创建和输出

max_size = 1000


class SqList:
    def __init__(self):
        self.elem = [None] * max_size  # 为顺序表分配一个大小为max_size的数组空间
        self.length = 0  # 空表长度为0

    def list_insert(self, i, e):
        # 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1

        if i > len(self.elem):  # 存储空间已满
            raise Exception('空间已满')

        if i < 1 or i > self.length + 1:
            raise Exception('位置不合法')

        for idx in range(self.length - 1, i - 2, -1):
            self.elem[idx + 1] = self.elem[idx]  # 插入位置及之后的元素后移
        self.elem[i - 1] = e  # 将新元素e放入第i个位置
        self.length += 1  # 表长加1

    def clear_list(self):
        self.length = 0

    def list_empty(self):
        return self.length == 0

    def get_elem(self, i):
        # 返回顺序表self中的第i个元素
        if 1 <= i <= self.length:
            return self.elem[i - 1]
        raise Exception('位置不合法')

    def locate_elem(self, e):
        # 在顺序表中查找值为e的数据元素,返回其序号
        for i, elem in enumerate(self.elem[:self.length]):
            if elem == e:
                return i + 1  # 查找成功,返回序号i+1
        raise Exception('元素不存在')

    def list_delete(self, i):
        # 删除顺序表中第i个元素
        if i < 1 or i > self.length:
            raise Exception('位置不合法')
        for idx in range(i, self.length):
            self.elem[idx - 1] = self.elem[idx]  # 被删除元素之后的元素前移
        self.length -= 1  # 表长减1

    def set_length(self, a):
        self.length = a

    def __len__(self):
        return self.length

    def __str__(self):
        return str(self.elem[:self.length])


def sq_create(data):
    # 顺序表的初始化
    sq_list = SqList()
    for i in range(len(data)):
        sq_list.list_insert(i+1,data[i])
    return sq_list 

第2关:基于顺序存储结构的图书信息表的排序

max_size = 1000


class SqList:
    def __init__(self):
        self.elem = [None] * max_size  # 为顺序表分配一个大小为max_size的数组空间
        self.length = 0  # 空表长度为0

    def list_insert(self, i, e):
        # 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1

        if i > len(self.elem):  # 存储空间已满
            raise Exception('空间已满')

        if i < 1 or i > self.length + 1:
            raise Exception('位置不合法')

        for idx in range(self.length - 1, i - 2, -1):
            self.elem[idx + 1] = self.elem[idx]  # 插入位置及之后的元素后移
        self.elem[i - 1] = e  # 将新元素e放入第i个位置
        self.length += 1  # 表长加1

    def clear_list(self):
        self.length = 0

    def list_empty(self):
        return self.length == 0

    def get_elem(self, i):
        # 返回顺序表self中的第i个元素
        if 1 <= i <= self.length:
            return self.elem[i - 1]
        raise Exception('位置不合法')

    def locate_elem(self, e):
        # 在顺序表中查找值为e的数据元素,返回其序号
        for i, elem in enumerate(self.elem[:self.length]):
            if elem == e:
                return i + 1  # 查找成功,返回序号i+1
        raise Exception('元素不存在')

    def list_delete(self, i):
        # 删除顺序表中第i个元素
        if i < 1 or i > self.length:
            raise Exception('位置不合法')
        for idx in range(i, self.length):
            self.elem[idx - 1] = self.elem[idx]  # 被删除元素之后的元素前移
        self.length -= 1  # 表长减1

    def set_length(self, a):
        self.length = a

    def __len__(self):
        return self.length

    def __str__(self):
        return str(self.elem[:self.length])


def sq_sort(sq_list):
    # 排序
    for i in range(1, sq_list.length):
        for j in range(sq_list.length - i):
            if sq_list.elem[j]["price"] < sq_list.elem[j+1]["price"]:
                sq_list.elem[j],sq_list.elem[j+1] = sq_list.elem[j+1],sq_list.elem[j]
    return sq_list

第3关:基于顺序存储结构的图书信息表的修改

max_size = 1000


class SqList:
    def __init__(self):
        self.elem = [None] * max_size  # 为顺序表分配一个大小为max_size的数组空间
        self.length = 0  # 空表长度为0

    def list_insert(self, i, e):
        # 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1

        if i > len(self.elem):  # 存储空间已满
            raise Exception('空间已满')

        if i < 1 or i > self.length + 1:
            raise Exception('位置不合法')

        for idx in range(self.length - 1, i - 2, -1):
            self.elem[idx + 1] = self.elem[idx]  # 插入位置及之后的元素后移
        self.elem[i - 1] = e  # 将新元素e放入第i个位置
        self.length += 1  # 表长加1

    def clear_list(self):
        self.length = 0

    def list_empty(self):
        return self.length == 0

    def get_elem(self, i):
        # 返回顺序表self中的第i个元素
        if 1 <= i <= self.length:
            return self.elem[i - 1]
        raise Exception('位置不合法')

    def locate_elem(self, e):
        # 在顺序表中查找值为e的数据元素,返回其序号
        for i, elem in enumerate(self.elem[:self.length]):
            if elem == e:
                return i + 1  # 查找成功,返回序号i+1
        raise Exception('元素不存在')

    def list_delete(self, i):
        # 删除顺序表中第i个元素
        if i < 1 or i > self.length:
            raise Exception('位置不合法')
        for idx in range(i, self.length):
            self.elem[idx - 1] = self.elem[idx]  # 被删除元素之后的元素前移
        self.length -= 1  # 表长减1

    def set_length(self, a):
        self.length = a

    def __len__(self):
        return self.length

    def __str__(self):
        return str(self.elem[:self.length])


def revise_price_sq(sq_list):
    # 计算平均价格,并按照题目要求修改价格
    # 返回平均价格和修改后的顺序表
    average = 0
    sum = 0
    for i in range(sq_list.length):
        sum += sq_list.elem[i]['price']
    average = sum / sq_list.length
    for i in range(sq_list.length):
        if sq_list.elem[i]['price'] >= average:
            sq_list.elem[i]['price'] *= 1.1
        else:
            sq_list.elem[i]['price'] *= 1.2
    return round(average,2) , sq_list
    

第4关:基于顺序存储结构的图书信息表的最贵图书的查找

max_size = 1000


class SqList:
    def __init__(self):
        self.elem = [None] * max_size  # 为顺序表分配一个大小为max_size的数组空间
        self.length = 0  # 空表长度为0

    def list_insert(self, i, e):
        # 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1

        if i > len(self.elem):  # 存储空间已满
            raise Exception('空间已满')

        if i < 1 or i > self.length + 1:
            raise Exception('位置不合法')

        for idx in range(self.length - 1, i - 2, -1):
            self.elem[idx + 1] = self.elem[idx]  # 插入位置及之后的元素后移
        self.elem[i - 1] = e  # 将新元素e放入第i个位置
        self.length += 1  # 表长加1

    def clear_list(self):
        self.length = 0

    def list_empty(self):
        return self.length == 0

    def get_elem(self, i):
        # 返回顺序表self中的第i个元素
        if 1 <= i <= self.length:
            return self.elem[i - 1]
        raise Exception('位置不合法')

    def locate_elem(self, e):
        # 在顺序表中查找值为e的数据元素,返回其序号
        for i, elem in enumerate(self.elem[:self.length]):
            if elem == e:
                return i + 1  # 查找成功,返回序号i+1
        raise Exception('元素不存在')

    def list_delete(self, i):
        # 删除顺序表中第i个元素
        if i < 1 or i > self.length:
            raise Exception('位置不合法')
        for idx in range(i, self.length):
            self.elem[idx - 1] = self.elem[idx]  # 被删除元素之后的元素前移
        self.length -= 1  # 表长减1

    def set_length(self, a):
        self.length = a

    def __len__(self):
        return self.length

    def __str__(self):
        return str(self.elem[:self.length])


def highest_price_sq(sq_list):
    # 查找最贵的书,放入result并返回
    max_price = 0
    for i in range(sq_list.length):
        if sq_list.elem[i]['price'] > max_price:
            max_price = sq_list.elem[i]['price']
    result = SqList()
    for i in range(sq_list.length):
        if max_price == sq_list.elem[i]['price']:
            result.list_insert(result.length + 1, sq_list.elem[i])
    return result

第5关:基于顺序存储结构的图书信息表的新图书的入库

max_size = 1000


class SqList:
    def __init__(self):
        self.elem = [None] * max_size  # 为顺序表分配一个大小为max_size的数组空间
        self.length = 0  # 空表长度为0

    def list_insert(self, i, e):
        # 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1

        if i > len(self.elem):  # 存储空间已满
            raise Exception('空间已满')

        if i < 1 or i > self.length + 1:
            raise Exception('位置不合法')

        for idx in range(self.length - 1, i - 2, -1):
            self.elem[idx + 1] = self.elem[idx]  # 插入位置及之后的元素后移
        self.elem[i - 1] = e  # 将新元素e放入第i个位置
        self.length += 1  # 表长加1

    def clear_list(self):
        self.length = 0

    def list_empty(self):
        return self.length == 0

    def get_elem(self, i):
        # 返回顺序表self中的第i个元素
        if 1 <= i <= self.length:
            return self.elem[i - 1]
        raise Exception('位置不合法')

    def locate_elem(self, e):
        # 在顺序表中查找值为e的数据元素,返回其序号
        for i, elem in enumerate(self.elem[:self.length]):
            if elem == e:
                return i + 1  # 查找成功,返回序号i+1
        raise Exception('元素不存在')

    def list_delete(self, i):
        # 删除顺序表中第i个元素
        if i < 1 or i > self.length:
            raise Exception('位置不合法')
        for idx in range(i, self.length):
            self.elem[idx - 1] = self.elem[idx]  # 被删除元素之后的元素前移
        self.length -= 1  # 表长减1

    def set_length(self, a):
        self.length = a

    def __len__(self):
        return self.length

    def __str__(self):
        return str(self.elem[:self.length])


def sq_insert(sq_list, pos, book):
    # 在pos处插入book
    # 返回插入后的sq_list, 若插入位置不合法,返回None
    if pos < 1 or pos > sq_list.length:
        return None
    sq_list.list_insert(pos, book)
    # 返回插入后的sq_list, 若插入位置不合法,返回None
    return sq_list
    pass

第6关:基于顺序存储结构的图书信息表的旧图书的出库

max_size = 1000


class SqList:
    def __init__(self):
        self.elem = [None] * max_size  # 为顺序表分配一个大小为max_size的数组空间
        self.length = 0  # 空表长度为0

    def list_insert(self, i, e):
        # 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1

        if i > len(self.elem):  # 存储空间已满
            raise Exception('空间已满')

        if i < 1 or i > self.length + 1:
            raise Exception('位置不合法')

        for idx in range(self.length - 1, i - 2, -1):
            self.elem[idx + 1] = self.elem[idx]  # 插入位置及之后的元素后移
        self.elem[i - 1] = e  # 将新元素e放入第i个位置
        self.length += 1  # 表长加1

    def clear_list(self):
        self.length = 0

    def list_empty(self):
        return self.length == 0

    def get_elem(self, i):
        # 返回顺序表self中的第i个元素
        if 1 <= i <= self.length:
            return self.elem[i - 1]
        raise Exception('位置不合法')

    def locate_elem(self, e):
        # 在顺序表中查找值为e的数据元素,返回其序号
        for i, elem in enumerate(self.elem[:self.length]):
            if elem == e:
                return i + 1  # 查找成功,返回序号i+1
        raise Exception('元素不存在')

    def list_delete(self, i):
        # 删除顺序表中第i个元素
        if i < 1 or i > self.length:
            raise Exception('位置不合法')
        for idx in range(i, self.length):
            self.elem[idx - 1] = self.elem[idx]  # 被删除元素之后的元素前移
        self.length -= 1  # 表长减1

    def set_length(self, a):
        self.length = a

    def __len__(self):
        return self.length

    def __str__(self):
        return str(self.elem[:self.length])


def delete_sq(sq_list, pos):
    # 旧图书的出库和输出
    if pos <1or pos >sq_list.length:
        return None
    # 返回删除pos位置图书后的sq_list, 若pos不合法,返回None
    sq_list.list_delete(pos)
    return sq_list
    pass

定义一个顺序表(如数组或链)来存储图书信息,可以采用结构体或类的形式,如下: ```c++ struct Book { int bookID; string title; double price; }; // 图书信息创建 Book* createBookList(int size) { Book* list = new Book[size]; for (int i = 0; i < size; i++) { list[i].bookID = -1; // 初始值设为无效 ID list[i].title = ""; list[i].price = 0.0; } return list; } // 输出图书信息 void display(Book* list, int size) { for (int i = 0; i < size; i++) { cout << "ID: " << list[i].bookID << ", Title: " << list[i].title << ", Price: " << list[i].price << endl; } } // 排序(例如使用冒泡排序) void sortBooks(Book* list, int size) { // ... 实现冒泡排序算法 ... } // 修改图书信息 void updateBook(Book* list, int index, int newID, string newName, double newPassword) { list[index].bookID = newID; list[index].title = newName; list[index].price = newPassword; } // 逆序存储 void reverseOrder(Book* list, int size) { for (int i = 0, j = size - 1; i < j; i++, j--) { swap(list[i], list[j]); } } // 查找最贵图书 Book* findMostExpensive(Book* list, int size) { Book* maxBook = &list[0]; for (int i = 1; i < size; i++) { if (list[i].price > maxBook->price) { maxBook = &list[i]; } } return maxBook; } // 查找最爱图书(这里可以根据某种规则,比如销量或其他用户评价) Book* findFavourite(Book* list, int size) { // ... 根据喜爱度排序并返回顶部元素 ... } // 查找最佳位置图书(可能根据某种评分系统) Book* findBestPosition(Book* list, int size) { // ... 按某种标准计算每个书籍的位置并返回最高分的图书 ... } // 新图书入库 void addNewBook(Book* list, int& size, Book newBook) { list[size++] = newBook; } // 旧图书出库 void removeOldBook(Book* list, int& size, int index) { if (index < size) { memmove(&list[index], &list[index + 1], sizeof(Book) * (size - index - 1)); size--; } } // 图书去重 void removeDuplicates(Book* list, int& size) { sortBooks(list, size); for (int i = 1; i < size; i++) { if (list[i].bookID == list[i - 1].bookID) { removeOldBook(list, size, i); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值