自定义数据元素的类型和存储结构(顺序表或链表均可),完成如下的功能: ①录入:从键盘输入(或从文件读入)图书(或学生)信息表的各个数据元素; ②查找:可按不同属性查找所有等于给定值的数据元素,找到并返回它们在表中的位序; ③插入:在表中第i(1=<i<=N+1)个位置插入一个新元素; ④删除:可删除表中第i(1=<i<=N)个位置上的元素; ⑤输出:依次打印表中的各个元素的值;
时间: 2023-05-21 19:05:38 浏览: 126
ChatGPT: 可以的,这是一个非常基础的数据结构问题,先确定一下您需要存储的元素类型以及数据结构是顺序表还是链表?
用户: 存储的是图书信息,可以用结构体存储各个元素,存储的数据结构使用链表。
ChatGPT: 好的,那我就针对这个需求来回答您的问题:
① 首先,您需要定义一个结构体来存储图书信息,比如:
```c
struct Book {
char name[50]; // 书名
char author[20]; // 作者
float price; // 价格
int num; // 库存量
};
```
然后,您需要定义链表节点的结构体:
```c
struct ListNode {
struct Book data; // 数据域
struct ListNode* next; // 指针域
};
```
再定义一个链表的头结点:
```c
struct ListNode* head = NULL;
```
② 接下来,您需要实现查找功能。可以编写一个函数,遍历链表,找到符合给定值的节点,并返回它们的位置。
```c
void search(char* name) {
struct ListNode* p = head;
int index = 1;
while(p != NULL) {
if(strcmp(p -> data.name, name) == 0) {
printf("找到了第%d个节点\n", index);
}
p = p -> next;
index++;
}
}
```
③ 要实现插入功能,可以编写一个函数,在指定位置插入一个新节点。
```c
void insert(int index, struct Book data) {
if(index == 1) { // 插入到头结点处
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode -> data = data;
newNode -> next = head;
head = newNode;
}
else { // 插入到其他位置
struct ListNode* p = head;
int i = 1;
while(p != NULL && i < index - 1) {
p = p -> next;
i++;
}
if(p == NULL) {
return;
}
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode -> data = data;
newNode -> next = p -> next;
p -> next = newNode;
}
}
```
④ 要实现删除功能,可以编写一个函数,在指定位置删除一个节点。
```c
void delete(int index) {
if(index == 1) { // 删除头结点
struct ListNode* p = head;
head = head -> next;
free(p);
}
else {
struct ListNode* p = head;
int i = 1;
while(p != NULL && i < index - 1) {
p = p -> next;
i++;
}
if(p == NULL || p -> next == NULL) {
return;
}
struct ListNode* q = p -> next;
p -> next = q -> next;
free(q);
}
}
```
⑤ 要实现输出功能,可以编写一个函数,遍历链表,并依次输出各个节点的数据域。
```c
void print() {
struct ListNode* p = head;
while(p != NULL) {
printf("书名:%s 作者:%s 价格:%.2f 库存量:%d\n", p -> data.name, p -> data.author, p -> data.price, p -> data.num);
p = p -> next;
}
}
```
以上就是实现自定义数据元素类型和存储结构的完整代码。
阅读全文