目录
1、创建表结构
#include <stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int status;
typedef struct {
int bookID;//图书标号
char bookName[20];//图书名称
double bookPrice;//图书价格
}Book;
typedef Book DataType;//Book下面的各个图书
typedef struct {
DataType* elem;//类型
int length;//数量
}BookList;
2、 线性表的初始化
status InitList(BookList* L)//线性表初始化
{
L->elem = (DataType*)malloc(sizeof(DataType) * MAXSIZE);
if (!L->length) exit(OVERFLOW);
L->length = 0;//空表长度为0
return OK;
}
3、输入方法
void InputList(DataType* e) {//输入方法
printf("请输入图书编号:\n");
scanf_s("%d", &e->bookID);
printf("请输入图书名称:\n");
scanf_s("%s", &e->bookName);
printf("请输入图书价格:\n");
scanf_s("%lf", &e->bookPrice);
}
4、输出方法
void OutputList(DataType* e){//输出方法
printf(" %d %s %.2lf\n", e->bookID, e->bookName, e->bookPrice);
}
5、插入元素
int ListInsert_sq(BookList* L, int i, DataType e) {//插入元素
if (i<1 || i>L->length + 1)
{
printf("插入位置不合法\n");
return ERROR;
}
if (L->length == MAXSIZE)
{
printf("顺序表已满,不能插入元素\n");
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 1;
}
6、删除元素
int DeleteList(BookList* L, int i, DataType* e) {//删除节点
int j;
if (L->length <= 0) {
printf("顺序表已空不能进行删除\n");
return 0;
}
else if (i<1 || i>L->length) {
printf("顺序表删除位置不合适\n");
return -1;
}
else {
*e = L->elem[i - 1];
for (j = i; j < L->length; j++) {
L->elem[j - 1] = L->elem[j];
}
L->length = L->length - 1;
printf("删除数据:\n");
printf(" %d %s %.2lf\n", e->bookID, e->bookName, e->bookPrice);
}
return 1;
}
7、修改元素
int UpdateList(BookList* L, int i, DataType e) {//修改元素
int j;
if (L->length <= 0) {
printf("顺序表已空不能进行修改\n");
return 0;
}
else if (i<1 || i>L->length) {
printf("顺序表修改位置不合适\n");
return -1;
}
else {
L->elem[i - 1] = e;
}
return 1;
}
8、按序号查询
int GetList(BookList* L, int i, DataType* e) {//按序号查询数据
if (i<1 || i>L->length) {
return -1;
}
*e = L->elem[i - 1];
printf("按序号查询数据:\n");
printf(" %d %s %.2lf\n", e->bookID, e->bookName, e->bookPrice);
return 1;
}
9、按内容查询
int LocationList(BookList* L, DataType e) {//按内容查询数据
int i;
for (i = 0; i < L->length; i++) {
//!strcmp(bl->elem[i].name,e.name)
if (!strcmp(L->elem[i].bookName, e.bookName))
{
printf("按内容查询数据 :\n");
printf(" %d %s %.2lf\n", L->elem[i].bookID, L->elem[i].bookName, L->elem[i].bookPrice);
return 1;
}
}
return 0;
}
10、项目的执行
int main() {
BookList L;
int n, num, i, flag = 0, nums;
DataType e;
do {
printf("********************************************\n");
printf("* 1.创建图书信息表 *\n");
printf("* 2.输入图书信息表 *\n");
printf("* 3.输出图书信息表 *\n");
printf("* 4.增加图书信息表 *\n");
printf("* 5.删除图书信息表 *\n");
printf("* 6.修改图书信息表 *\n");
printf("* 7.查找图书信息表 *\n");
printf("* 0.退出系统 *\n");
printf("********************************************\n");
printf("请根据提示操作!\n");
scanf_s("%d", &n);
switch (n) {
case 1:
if (InitList(&L))
printf("成功建立顺序表\n\n");
else
printf("顺序表建立失败\n\n");
break;
case 2:
printf("请输入图书的数量<100: \n");
scanf_s("%d", &num);
if (num > 100) {
printf("===============请按照要求输入=============\n\n\n");
}
else {
for (int i = 0; i < num; i++) {
printf("第%d种数据:\n", i + 1);
InputList(&L.elem[i]);//L.elem[i]是DataType
}
L.length = num;
}
break;
case 3:
printf("当前图书总数为:%d\n", L.length);
printf("当前顺序表为:\n");
printf("图书编号 图书名称 图书价格\n");
for (i = 0; i < L.length; i++) {
OutputList(&L.elem[i]);
}
printf("\n");
break;
case 4:
printf("请输入新增图书的位置:\n");
scanf_s("%d", &num);
printf("请输入要新增的图书信息:\n");
printf("请输入图书编号:\n");
scanf_s("%d", &e.bookID);
printf("请输入图书名称:\n");
scanf_s("%s", &e.bookName);
printf("请输入图书价格:\n");
scanf_s("%lf", &e.bookPrice);
if (InsertList(&L, num, e)) {
printf("新增数据成功\n");
}
else {
printf("新增数据失败\n");
}
break;
case 5:
printf("请输入删除图书的位置:\n");
scanf_s("%d", &num);
if (DeleteList(&L, num, &e)) {
printf("删除数据成功\n");
}
else {
printf("删除数据失败\n");
}
break;
case 6:
printf("请输入修改图书的位置:\n");
scanf_s("%d", &num);
printf("请输入要修改的图书信息:\n");
printf("请输入图书编号:\n");
scanf_s("%d", &e.bookID);
scanf_s("请输入图书名称:\n");
scscanf_sanf("%s", &e.bookName);
printf("请输入图书价格:\n");
scanf_s("%lf", &e.bookPrice);
if (UpdateList(&L, num, e)) {
printf("修改数据成功\n");
}
else {
printf("修改数据失败\n");
}
break;
case 7:
printf("==========请输入查询图书信息的类型==========\n");
printf("1.按位置编号查找\n");
printf("2.按图书名称查找\n");
scanf_s("%d", &num);
if (num == 1) {
printf("输入查询位置编号:\n");
scanf_s("%d", &nums);
if (GetList(&L, nums, &e)) {
printf("查询数据成功\n");
}
else {
printf("查询数据失败\n");
}
}
else if (num == 2) {
printf("输入查询图书名称:\n");
scanf_s("%s", &e.bookName);
if (LocationList(&L, e)) {
printf("查询数据成功\n");
}
else {
printf("查询数据失败\n");
}
}
else {
printf("请输入正确的编号\n");
}
break;
case 0:
flag = 1;
printf("你已退出了此系统\n");
break;
default:
printf("请输入正确的数字\n");
break;
}
} while (flag != 1);
return 0;
}