基于顺序存储结构的图书信息表的逆序存储
时间: 2023-05-25 13:04:01 浏览: 171
基于顺序存储结构的图书信息表逆序存储指的是将该表中的记录按照关键字相反的顺序重新存储。
具体操作过程如下:
1. 遍历原表,将其中的记录按照关键字值从大到小的顺序插入一个新表。
2. 删除原表中的所有记录。
3. 将新表中的所有记录按照插入的先后顺序重新插入原表中。
这样操作之后,原表中的记录的顺序就变成了按照关键字值从小到大的顺序排列了。
需要注意的是,在进行第1步插入新表的操作时,要保证插入时新表中的记录已按照关键字从大到小有序排列,可以采用插入排序、归并排序等算法。同时,可以利用顺序表的顺序存储结构,来优化新表的插入操作,避免开销太大。
相关问题
基于顺序存储结构的图书信息表的逆序存储 代码
以下是基于顺序存储结构的图书信息表逆序存储的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 图书信息表最大容量
typedef struct {
int id; // 书籍编号
char name[20]; // 书籍名称
float price; // 书籍价格
} Book;
typedef struct {
Book data[MAXSIZE]; // 存储数据的数组
int length; // 当前存储的数据个数
} SeqList;
// 初始化图书信息表
void initList(SeqList *L) {
L->length = 0;
}
// 向图书信息表中添加一本书
void addBook(SeqList *L, Book book) {
if (L->length >= MAXSIZE) {
printf("Error: Book list is full!\n");
return;
}
L->data[L->length++] = book;
}
// 逆序存储图书信息表
void reverseList(SeqList *L) {
int i;
Book temp;
for (i = 0; i < L->length / 2; i++) {
temp = L->data[i];
L->data[i] = L->data[L->length - i - 1];
L->data[L->length - i - 1] = temp;
}
}
// 打印图书信息表
void printList(SeqList L) {
int i;
for (i = 0; i < L.length; i++) {
printf("Book %d: %s, %.2f\n", L.data[i].id, L.data[i].name, L.data[i].price);
}
}
int main() {
SeqList L;
initList(&L);
// 添加几本书
Book book1 = {1, "C Programming", 29.99};
addBook(&L, book1);
Book book2 = {2, "Data Structures", 44.99};
addBook(&L, book2);
Book book3 = {3, "Algorithms", 39.99};
addBook(&L, book3);
printf("Original Book List:\n");
printList(L);
printf("\nReversed Book List:\n");
reverseList(&L);
printList(L);
return 0;
}
```
该代码定义了一个 `Book` 结构体来存储每一本书的信息,以及一个 `SeqList` 结构体来存储整个图书信息表。其中,`initList()` 函数用于初始化图书信息表,`addBook()` 函数用于向图书信息表中添加一本书,`reverseList()` 函数用于逆序存储图书信息表,`printList()` 函数用于打印图书信息表。在 `main()` 函数中,我们添加了几本书,打印原始的图书信息表,逆序存储图书信息表并打印逆序后的结果。
基于顺序存储结构的图书信息表的逆序存储代码
下面是基于顺序存储结构的图书信息表的逆序存储代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct {
char name[20];
char author[20];
char publisher[20];
float price;
} Book;
typedef struct {
Book data[MAXSIZE];
int length;
} BookList;
void reverse(BookList *L) {
int i;
Book temp;
for (i = 0; i < L->length / 2; i++) {
temp = L->data[i];
L->data[i] = L->data[L->length - i - 1];
L->data[L->length - i - 1] = temp;
}
}
int main() {
BookList L;
int i;
L.length = 5;
strcpy(L.data[0].name, "C Programming");
strcpy(L.data[0].author, "Dennis Ritchie");
strcpy(L.data[0].publisher, "Prentice Hall");
L.data[0].price = 22.99;
strcpy(L.data[1].name, "The C Programming Language");
strcpy(L.data[1].author, "Brian Kernighan");
strcpy(L.data[1].publisher, "Prentice Hall");
L.data[1].price = 31.55;
strcpy(L.data[2].name, "Head First C");
strcpy(L.data[2].author, "David Griffiths");
strcpy(L.data[2].publisher, "O'Reilly Media");
L.data[2].price = 29.99;
strcpy(L.data[3].name, "C Primer Plus");
strcpy(L.data[3].author, "Stephen Prata");
strcpy(L.data[3].publisher, "Sams Publishing");
L.data[3].price = 39.99;
strcpy(L.data[4].name, "Effective C");
strcpy(L.data[4].author, "Scott Meyers");
strcpy(L.data[4].publisher, "Addison-Wesley Professional");
L.data[4].price = 49.99;
printf("Original book list:\n");
for (i = 0; i < L.length; i++) {
printf("%s\t%s\t%s\t%.2f\n", L.data[i].name, L.data[i].author, L.data[i].publisher, L.data[i].price);
}
reverse(&L);
printf("Reversed book list:\n");
for (i = 0; i < L.length; i++) {
printf("%s\t%s\t%s\t%.2f\n", L.data[i].name, L.data[i].author, L.data[i].publisher, L.data[i].price);
}
return 0;
}
```
希望能够帮到你!