xcu数据结构作业;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
// 定义图书结构
typedef struct {
char title[50];
char author[30];
char publisher[30];
int year;
} Book;
// 定义线性表结构
typedef struct {
Book data[MAX_SIZE];
int length;
} LinearList;
// 初始化线性表
void initList(LinearList* list) {
list->length = 0;
}
// 查找图书
void searchBook(LinearList list, char* title) {
int i, found = 0;
for (i = 0; i < list.length; i++) {
if (strcmp(list.data[i].title, title) == 0) {
printf("《%s》的作者是%s,出版社是%s,出版年份是%d年\n",
list.data[i].title, list.data[i].author,
list.data[i].publisher, list.data[i].year);
found = 1;
break;
}
}
if (!found) {
printf("图书《%s》未找到\n", title);
}
}
// 插入图书
void insertBook(LinearList* list, Book book) {
if (list->length >= MAX_SIZE) {
printf("图书库已满,无法插入\n");
return;
}
list->data[list->length++] = book;
printf("图书《%s》已成功插入\n", book.title);
}
// 删除图书
void deleteBook(LinearList* list, char* title) {
int i, index = -1;
for (i = 0; i < list->length; i++) {
if (strcmp(list->data[i].title, title) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("图书《%s》未找到\n", title);
return;
}
for (i = index; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->length--;
printf("图书《%s》已成功删除\n", title);
}
// 修改图书信息
void modifyBook(LinearList* list, char* title) {
int i, found = 0;
for (i = 0; i < list->length; i++) {
if (strcmp(list->data[i].title, title) == 0) {
printf("请输入修改后的作者:");
scanf("%s", list->data[i].author);
printf("请输入修改后的出版社:");
scanf("%s", list->data[i].publisher);
printf("请输入修改后的出版年份:");
scanf("%d", &(list->data[i].year));
printf("图书《%s》的信息已成功修改\n", title);
found = 1;
break;
}
}
if (!found) {
printf("图书《%s 》未找到\n", title);
}
}
// 统计图书数量
void countBooks(LinearList list) {
printf("当前图书库共有%d本图书\n", list.length);
}
int main() {
LinearList bookList;
Book book;
int choice;
char searchTitle[50];
initList(&bookList);
while (1) {
printf("----- 图书信息管理系统 -----\n");
printf("1. 查找图书");
printf("2. 插入图书");
printf("3. 删除图书");
printf("4. 修改图书信息");
printf("5. 统计图书数量");
printf("0. 退出");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 0:
exit(0);
case 1:
printf("请输入要查找的图书名称:");
scanf("%s", searchTitle);
searchBook(bookList, searchTitle);
break;
case 2:
printf("请输入图书名称:");
scanf("%s", book.title);
printf("请输入图书作者:");
scanf("%s", book.author);
printf("请输入图书出版社:");
scanf("%s", book.publisher);
printf("请输入图书出版年份:");
scanf("%d", &(book.year));
insertBook(&bookList, book);
break;
case 3:
printf("请输入要删除的图书名称:");
scanf("%s", searchTitle);
deleteBook(&bookList, searchTitle);
break;
case 4:
printf("请输入要修改的图书名称:");
scanf("%s", searchTitle);
modifyBook(&bookList, searchTitle);
break;
case 5:
countBooks(bookList);
break;
default:
printf("请输入有效的选择!\n");
}
}
return 0;
}
下面是数据表的作业,如果不能在word文档成功复制,这里也可以
#include <stdio.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS 1
#define MAX_SIZE 200
typedef struct {
int data[MAX_SIZE];
int length;
} SeqList;
void menu() {
printf("-----顺序表操作-----\n");
printf("1.输入元素 ");
printf("2.输出元素 ");
printf("3.查找元素 ");
printf("4.插入元素 ");
printf("5.删除元素 ");
printf("6.有序表插入元素(输入元素必须为有序) ");
printf("0.退出");
printf(" ---请选择操作:");
}
void input(SeqList* list) {
int n, i;
printf("请输入元素个数:\n");
scanf("%d", &n);
printf("请输入元素值:\n");
for (i = 0; i < n; i++) {
scanf_s("%d", &(list->data[i]));
}
list->length = n;
printf("输入成功!\n");
}
void output(SeqList list) {
int i;
printf("顺序表元素:");
for (i = 0; i < list.length; i++) {
printf("%d ", list.data[i]);
}
printf("\n");
}
void search(SeqList list, int key) {
int i, found = 0;
for (i = 0; i < list.length; i++) {
if (list.data[i] == key) {
printf("元素 %d 在顺序表中的位置是 %d\n", key, i);
found = 1;
break;
}
}
if (!found) {
printf("顺序表中不存在元素 %d\n", key);
}
}
// 插入元素
void insert(SeqList* list, int key, int index) {
int i;
if (index < 0 || index > list->length) {
printf("插入位置无效!\n");
return;
}
if (list->length >= MAX_SIZE) {
printf("顺序表已满,无法插入!\n");
return;
}
for (i = list->length - 1; i >= index; i--) {
list->data[i + 1] = list->data[i];
}
list->data[index] = key;
list->length++;
printf("插入成功!\n");
}
// 删除元素
void Delete(SeqList* list, int index) {
int i;
if (index < 0 || index >= list->length) {
printf("删除位置无效!\n");
return;
}
for (i = index; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->length--;
printf("删除成功!\n");
}
void insert2(SeqList* list, int key) {
int flag =0;
int i;
for(i =0;i<list->length;i++){
if(list->data[i]> key){
flag ==1;
break;
}
}
for(int j =list->length;j>i;j--){
list->data[j] = list->data[j-1];
}
list->data[i] =key;
list->length++;
printf("插入成功!\n");
}
int main() {
SeqList list;
int choice, key, index;
list.length = 0;
while (1) {
menu();
scanf_s("%d", &choice);
switch (choice) {
case 0:
exit(0);
case 1:
input(&list);
break;
case 2:
output(list);
break;
case 3:
printf("请输入要查找的元素:");
scanf_s("%d", &key);
search(list, key);
break;
case 4:
printf("请输入要插入的元素和位置:");
scanf_s("%d %d", &key, &index);
insert(&list, key, index);
break;
case 5:
printf("请输入要删除的位置:");
scanf_s("%d", &index);
Delete(&list, index);
break;
case 6:
printf("请输入插入的元素:");
scanf_s("%d", &key);
insert2(&list, key);
break;
default:
printf("请输入有效的选择!\n");
}
}
return 0;
}
程序运行结果图