顺序表学习:

这个程序是用于学习数据结构而参考数据结构C语言第二版的教材实现的一个简易的图书管理系统。

逻辑结构:顺序表

线性表的顺序存储又称作顺序表。由一组地址连续的存储单元依次存储线性表的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。

特点是顺序表中的元素的逻辑顺序和物理顺序相同。

主要实现的功能

1.图书信息的录入

2.图书信息的显示

3.图书信息的插入

4.图书信息的删除

5.图书信息的存在查询

6.查看顺序表中第i个元素的信息

头文件定义

头文件中定义了书籍的结构体

//MaxSize可以进行更改,这里设置最多存储5
#define MaxSize 5//因为C语言中没有Status,将int定义为Status与书上保持一致,返回1/0表示
typedef int Status;typedef struct {//定义结构体,包含书号,书名,价格int bno;char name[20];int price;
}Book;
typedef Book ELemType;//定义顺序表
typedef struct {ELemType* elem;int length;
}SqlList;

函数

1.初始化顺序表

//初始化顺序表
Status InitSqlList(SqlList *L)
{L->elem = (ELemType*)malloc(sizeof(ELemType) * MaxSize);//为顺序表分配一个初始空间为MaxSize的数组空间//exit(x)(x不为0)都表示异常退出if (!L->elem) exit(-1); //存储分配失败退出L->length = 0;//空表长度为0return 1;
}

2.插入顺序表

//插入
Status Insert(SqlList L, int i, ELemType e)
{if ((i < 1) || i > L.length + 1) return 0;if (L.length == MaxSize) return 0;for (int j = L.length;j>=i; j--){L.elem[j] = L.elem[j-1];}L.elem[i - 1] = e;L.length++;return 1;
}

具体实现

//插入书籍的具体实现
void InsertBook(SqlList* L)
{ELemType e;printf("请输入你想插入的位置的序号\n");int num;scanf("%d", &num);printf("请输入你想插入的书籍编号\n");scanf("%d", &e.bno);printf("请输入你想插入的书籍名字\n");scanf("%s", e.name);printf("请输入你想插入的书籍价格\n");scanf("%d", &e.price);if (Insert(*L, num, e)){printf("插入成功!\n");}else {printf("插入失败!\n");}
}

3.删除指定元素

//删除
Status Delete(SqlList* L, int i)
{if (i<1 || i>L->length) return 0;for (int j = i-1 ; j <=L->length; j++){L->elem[j] = L->elem[j+1];}L->length--;return 1;
}

删除元素的具体实现和判断

//删除书籍的具体实现
void DeleteBook(SqlList* L)
{printf("请输入你想删除的书籍信息\n");int num;scanf("%d", &num);if (Delete(L, num)){printf("删除成功\n");}else{printf("删除失败\n");}
}

4.根据图书编号进行查找


//根据特定位置查找
Status GetElemByID(SqlList L,ELemType e)
{for (int i = 0; i < L.length; i++){if (L.elem[i].bno==e.bno){return 1;}}return 0;
}
void FindBook(SqlList* L)
{ELemType e;printf("请输入你要查找的图书的编号\n");scanf("%d", &e.bno);if (GetElemByID(*L, e)){printf("有这本书!\n");}else{printf("查无此书!\n");}
}

5.取出顺序表特定元素i的值

Status GetElem(SqlList L, int i, ELemType* e)
{if (i<1 || i>L.length) return 0;*e = L.elem[i-1];return 1;
}
void GetBook(SqlList* L)
{printf("请输入你想取第几本书\n");int num;scanf("%d", &num);ELemType e;if (GetElem(*L, num, &e)){printf("编号:%d\n,书名:%s\n,价格:%d\n", e.bno,e.name, e.price);}else {printf("查找失败!\n");}
}

6.其他函数

菜单函数

void menu()
{printf("\n********************************\n\n");printf("1. 录入信息\n");printf("2.打印全部信息\n");printf("3. 查找书籍是否存在\n");printf("4. 在指定位置插入书籍信息\n");printf("5. 在指定位置删除书籍信息\n");printf("6. 在指定位置删除书籍信息\n");printf("\n********************************\n\n");
}

输入函数

void inputElem(ELemType* e)
{printf("请输入编号\n");scanf("%d", &e->bno);printf("请输入书名\n");scanf("%s",e->name);printf("请输入价格\n");scanf("%d", &e->price);printf("输入完成\n\n");
}void inputBook(SqlList *L)
{printf("请输入你要录入的信息个数");int n;scanf_s("%d",&n);for (int i = 0; i < n; i++){//调用上面的函数inputElem(&L->elem[i]);}L->length = n;
}

输出函数

void printBook(SqlList* L, int i)
{printf("编号:%d\n,书名:%s\n,价格:%d\n", L->elem[i].bno, L->elem[i].name, L->elem[i].price);
}void Output(SqlList* L)
{for (int i = 0; i < L->length; i++){printBook(L, i);}
}

7.源文件代码

头文件代码在上,名字定义为HeadTitle.h

/*
数据结构:
用C语言实现图书管理系统-顺序表
*/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include"HeadTitle.h"//初始化顺序表
Status InitSqlList(SqlList *L)
{L->elem = (ELemType*)malloc(sizeof(ELemType) * MaxSize);//为顺序表分配一个初始空间为MaxSize的数组空间//exit(x)(x不为0)都表示异常退出if (!L->elem) exit(-1); //存储分配失败退出L->length = 0;//空表长度为0return 1;
}
//插入
Status Insert(SqlList L, int i, ELemType e)
{if ((i < 1) || i > L.length + 1) return 0;if (L.length == MaxSize) return 0;for (int j = L.length;j>=i; j--){L.elem[j] = L.elem[j-1];}L.elem[i - 1] = e;L.length++;return 1;
}
//插入书籍的具体实现
void InsertBook(SqlList* L)
{ELemType e;printf("请输入你想插入的位置的序号\n");int num;scanf("%d", &num);printf("请输入你想插入的书籍编号\n");scanf("%d", &e.bno);printf("请输入你想插入的书籍名字\n");scanf("%s", e.name);printf("请输入你想插入的书籍价格\n");scanf("%d", &e.price);if (Insert(*L, num, e)){printf("插入成功!\n");}else {printf("插入失败!\n");}
}
//删除
Status Delete(SqlList* L, int i)
{if (i<1 || i>L->length) return 0;for (int j = i-1 ; j <=L->length; j++){L->elem[j] = L->elem[j+1];}L->length--;return 1;
}
//删除书籍的具体实现
void DeleteBook(SqlList* L)
{printf("请输入你想删除的书籍信息\n");int num;scanf("%d", &num);if (Delete(L, num)){printf("删除成功\n");}else{printf("删除失败\n");}
}
void inputElem(ELemType* e)
{printf("请输入编号\n");scanf("%d", &e->bno);printf("请输入书名\n");scanf("%s",e->name);printf("请输入价格\n");scanf("%d", &e->price);printf("输入完成\n\n");
}void inputBook(SqlList *L)
{printf("请输入你要录入的信息个数");int n;scanf_s("%d",&n);for (int i = 0; i < n; i++){inputElem(&L->elem[i]);}L->length = n;
}void printBook(SqlList* L, int i)
{printf("编号:%d\n,书名:%s\n,价格:%d\n", L->elem[i].bno, L->elem[i].name, L->elem[i].price);
}void Output(SqlList* L)
{for (int i = 0; i < L->length; i++){printBook(L, i);}
}//根据特定位置查找
Status GetElemByID(SqlList L,ELemType e)
{for (int i = 0; i < L.length; i++){if (L.elem[i].bno==e.bno){return 1;}}return 0;
}
void FindBook(SqlList* L)
{ELemType e;printf("请输入你要查找的图书的编号\n");scanf("%d", &e.bno);if (GetElemByID(*L, e)){printf("有这本书!\n");}else{printf("查无此书!\n");}
}
void menu()
{printf("\n********************************\n\n");printf("1. 录入信息\n");printf("2.打印全部信息\n");printf("3. 查找书籍是否存在\n");printf("4. 在指定位置插入书籍信息\n");printf("5. 在指定位置删除书籍信息\n");printf("6. 在指定位置删除书籍信息\n");printf("\n********************************\n\n");
}
//取值
Status GetElem(SqlList L, int i, ELemType* e)
{if (i<1 || i>L.length) return 0;*e = L.elem[i-1];return 1;
}
void GetBook(SqlList* L)
{printf("请输入你想取第几本书\n");int num;scanf("%d", &num);ELemType e;if (GetElem(*L, num, &e)){printf("编号:%d\n,书名:%s\n,价格:%d\n", e.bno,e.name, e.price);}else {printf("查找失败!\n");}
}
int main()
{menu();SqlList L;int choose;if (InitSqlList(&L)){printf("初始化成功!\n");while (1){printf("请输入选择,其他键退出:");scanf("%d", &choose);switch (choose){case 1: inputBook(&L);      break;case 2:   Output(&L);         break;case 3:   FindBook(&L);       break;case 4:   InsertBook(&L);     break;case 5:   DeleteBook(&L);     break;case 6: GetBook(&L);      break;case 7:exit(1);               break;printf("已录入的学生个数为:%d\n\n", L.length);break;default:exit(1);}}}else {printf("初始化失败\n");}}

8.顺序表的优缺点

顺序表最主要的特点是随机访问,即可以通过首地址和元素序号相加就可以找到指定的编号

所以他存取效率高,同时存储密度也高,每个结点只存储数据元素

缺点在于插入和删除需要移动大量的元素,对于需要经常变更数据的场景不适用。

顺序表实现图书管理系统增删改查相关推荐

  1. python图书管理系统增删改查_固定资产管理系统,高效管理企业资产

    固定资产管理系统是面向资产密集型单位信息化解决方案的总称,是一款通用性极强的管理软件,能够对单位所有的固定资产进行全方位掌控,并规范其管理流程,适用于企业.机关.学校.医院等单位.系统围绕固定资产的& ...

  2. python图书管理系统增删改查_图书管理系统---增删改查

    此代码只考虑正确情况,未判断错误情况 package dboperate; import java.util.Scanner; import model.BookDB; import dboperat ...

  3. python图书管理系统增删改查_python基础-字典的增删改查

    字典 字典的创建方式: # 方式一: dict1 = dict((("one", 1), ("two", 2), ("three", 3)) ...

  4. WEB阶段7:综合练习-联系人管理系统-增删改查查询分页

    综合练习-联系人管理系统-增删改查&查询分页 回顾 能够说出过滤器的作用 解决全局乱码问题 用户权限访问控制 用户输入文本内容进行过滤 能够编写过滤器 创建一个类实现javax.servlet ...

  5. Java全栈(四)web网页技术:15.书城项目实战四:管理端图书的增删改查(后台)

    1.需求澄清 管理端图书管理页面[book_manager.jsp]页面原型如下: 需要实现图书的添加.删除.修改.分页显示等操作 2.前期准备 2.1 创建数据表books create TABLE ...

  6. Java-GUI编程实战之管理系统 Day3【学生管理系统GUI设计、学生管理系统增删改查、项目MVC结构介绍、Java技能图谱】

    视频.课件.源码[链接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q 提取码:zjxs] Java-GUI编程实战之管理系统 Day1[项目开发流程. ...

  7. 基于springboot+thymeleaf+mybatis的员工管理系统 —— 增删改查

    员工管理系统 - 增删改查 entity 查询所有功能 查询所有的页面 emplist.html 保存员工 保存员工的页面 addEmp.html 删除员工 修改员工 根据id查询员工 修改员工信息 ...

  8. python学生信息管理系统-增删改查-根据姓名查询

    学生信息管理系统 增删改查,求平均年龄,退出系统,根据姓名查询 def show_menu():print('*******欢迎使用学生管理系统*************')print('****** ...

  9. Maynor手把手教你完成一个SpringBoot+Vue+Element实现的SPA商品管理系统(增删改查)

    Maynor手把手教你完成一个SpringBoot+Vue+Element实现的SPA商品管理系统(增删改查) 前言 完整代码 三连后私信我获取~ 撸了一上午完成的SPA商品管理系统,求三连! B站演 ...

最新文章

  1. 【牛腩新闻发布系统】整和后台05
  2. css 子元素设置float,父元素高度塌陷
  3. 猫眼、淘票票两虎相争:下沉市场、服务、内容成决胜关键
  4. 即使连网了ping也会失败
  5. GDCM:gdcm::Parser的测试程序
  6. urlos 阻止访问ip_URLOS使用流程
  7. android fastboot原理,FastBoot使用一
  8. python处理时间序列非平稳_非平稳时间序列的自相关
  9. Hi3798 PWM输出控制背光
  10. 什么是云服务器,ECS它能干什么?(详解)
  11. SpringBoot整合RedisTemplate实现缓存信息监控
  12. 原生JS实现贪吃蛇游戏
  13. educode寄存器设计与应用之节拍脉冲发生器的设计(在Logisim上实现)
  14. PyQt5:ToggleButton开关按钮(24)
  15. On the Factory Floor: ML Engineering for Industrial-Scale Ads Recommendation Models笔记
  16. 互联网日报 | 4月1日 星期四 | 华为2020年收入8914亿元;滴滴拿下消费金融牌照;HM已在中国关闭约20家门店...
  17. python爬虫文件下载很慢卡住线程_python爬虫多线程假死怎么解决?
  18. 承受自律的苦,不要承受自责的悔
  19. STK运载火箭发射仿真
  20. java列转行_关于java8根据某个字段分组,列转行的问题

热门文章

  1. html文件上传 用到美化,文件上传html样式美化
  2. android 动画设置延时,android – 如何在LayoutTransition动画之前消除延迟
  3. 游走好莱坞的时尚摄影师—罗冰 携手“小木兰”饶雪晶杂志作品
  4. CF1660C Get an Even String
  5. 单内存16g和双8g差别大吗_电脑内存买单条16G还是8Gx2?一文告诉你
  6. Omnibox之Chrome关闭地址栏 输入提示
  7. 2017二级c语言选择题,【2017年整理】国家计算机等级考试二级c语言选择题及答案全部.doc...
  8. 编程式事务管理(详解)
  9. 单模光电转换器怎么接_光纤收发器是怎么连接的?光纤收发器连接方式图解!...
  10. sed替换所有文件中的字符串