线性表(单链表与顺序表)的优缺点:

** 顺序表**

-从栈中开辟一片连续的存储单元对数据进行存储,存储结构和数据逻辑相同;
-空间大小固定,管理方便,自由度小;
-通过下标获取元素,存储密度为1;
-查找元素快,平均时间复杂度为O(1);
-增删元素慢,增删的平均时间复杂度为O(n);

链表

-从堆中动态开辟出的不连续存储单元,通过指针在计算机存储单元上对数据逻辑进行链接
-空间大小不固定,申请管理麻烦,自由度大;
-通过结构体next数据项中存储的指针寻找并获取元素;
-查找元素慢,查找平均时间复杂度为O(n);
-增删元素快,增删的平均时间复杂度为O(1);

综上,在查找操作频繁时候考虑采用顺序表,在增删操作频繁时候考虑采用链表。

详解:https://www.cnblogs.com/amou/p/9074270.html

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define Maxlen 100
struct Data{int bookID;char bookName[20];double bookPrice;
};
typedef Data DataType;
typedef struct BookList{DataType data;struct BookList *next;
};
//单链表初始化
BookList * InitList(BookList *h){h=(BookList *)malloc(sizeof(BookList));//创建头结点 if(h==NULL){return 0;}h->next=NULL;return h;
}
//判断单链表是否为空
int ListEmpty(BookList *h){if(h->next==NULL){return 1; }else{return 0;}
}
//输入图书信息
BookList * InputList(BookList *h){BookList *s,*r;int num; r=h;printf("==============================创建图书信息==============================\n");printf("请输入图书的数量:\n");scanf("%d",&num);for(int i=0;i<num;i++){printf("请输入第%d个图书信息:\n",i+1);s=(BookList*)malloc(sizeof(BookList));//创建存储数据的新结点 printf("请输入图书编号:\n");scanf("%d",&s->data.bookID);printf("请输入图书名称:\n");scanf("%s",&s->data.bookName);printf("请输入图书价格:\n");scanf("%lf",&s->data.bookPrice);r->next=s;r=s;}r->next=NULL;printf("创建成功!\n");return h;
}
//输出图书信息
void OutputList(BookList *L){printf("==============================输出图书信息==============================\n");printf("图书编号  图书名称  图书价格\n");BookList *p;p=L->next;while(p!=NULL){printf("      %d        %s       %.2lf\n", p->data.bookID, p->data.bookName, p->data.bookPrice);p=p->next;}printf("\n");
}
//增加图书信息表
int InsertList(BookList *L){printf("==============================增加图书信息==============================\n");BookList *p,*s;int num,j=0;p=L->next;printf("请输入新增数据的位置:\n");scanf("%d",&num);while(p->next!=NULL&&j<num-1){p=p->next;j++;}if(j!=num-1){printf("插入位置不存在\n");return 0;}s=(BookList*)malloc(sizeof(BookList));printf("请输入图书编号:\n");scanf("%d",&s->data.bookID);printf("请输入图书名称:\n");scanf("%s",&s->data.bookName);printf("请输入图书价格:\n");scanf("%lf",&s->data.bookPrice);s->next=p->next;p->next=s;printf("新增成功\n");return 1;
}
//删除图书信息表
int DeleteList(BookList *L){BookList *r,*pre;int num,j=0;r=L->next;printf("==============================删除图书信息==============================\n");printf("请输入删除的图书编号:\n");scanf("%d",&num);while(r!=NULL){if(r->data.bookID==num){      pre->next=r->next;free(r);printf("删除成功\n"); return 1;}pre=r;r=r->next;}return 0;
}
//修改图书信息表
int UpdateList(BookList *L){BookList *pre,*r;int num;r=L->next;printf("==============================修改图书信息==============================\n");printf("请输入修改的图书编号:\n");scanf("%d",&num);while(r!=NULL){if(r->data.bookID==num){printf("请输入图书编号:\n");scanf("%d",&r->data.bookID);printf("请输入图书名称:\n");scanf("%s",&r->data.bookName);printf("请输入图书价格:\n");scanf("%lf",&r->data.bookPrice);return 1;}r=r->next;}return 0;
}
// 查找图书信息表
int SelectList(BookList *L){BookList *r,*pre;int  num;r=L->next;printf("==============================查找图书信息==============================\n");printf("请输入查找的图书编号:\n");scanf("%d",&num);while(r!=NULL){if(r->data.bookID==num){printf("图书编号  图书名称  图书价格\n");printf("      %d        %s       %.2lf\n", r->data.bookID, r->data.bookName, r->data.bookPrice);return 1;}r=r->next;}printf("sorry,不存在此图书\n");return 0;
}
int main(){BookList *h;BookList *L=NULL;DataType e;int n,flag=0;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("%d",&n);switch(n){case 1:h=InitList(h);printf("初始化成功!!\n");break;case 2:L=InputList(h);break; case 3:OutputList(L);break; case 4:InsertList(L);break;case 5:DeleteList(L);break;case 6:UpdateList(L);break;case 7:SelectList(L);break;case 0:flag=1;break;default:printf("请输入正确的图书操作类型\n");break;}}while(flag!=1);
}

线性表(单链表)—图书管理系统 c语言版相关推荐

  1. python的线性链表_Python线性表——单链表-阿里云开发者社区

    Python线性表--单链表 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列.线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,有且只有一个直接后继, ...

  2. 数据结构_Java_基于 线性表-单链表的初始化、逆序、去重、非递减序列的合并(开辟新链表先整体插入一个链表全部元素,再遍历另外一个链表寻找合适位置插入 、开辟新链表实现舍弃原链表)等操作实现

    写在前面 不久前学习了数据结构线性表-数组-链表的相关知识,用C/C++语言实现了 单链表的系列相关操作 .见往期博客: 数据结构实验2_C语言_基于顺序表的非递减有序表的合并.线性表元素的增.删.改 ...

  3. 第二章:2线性表---单链表表示和实现

    前言: 为避免在使用线性表顺序存储结构的时,需插入和删除需大量移动元素的弊端. 本节讨论线性表的另外一种表示方法---链式存储结构: 由于它不要求逻辑上相邻的元素在物理位置上相邻,因此它对元素的插入和 ...

  4. 理论基础 —— 线性表 —— 单链表

    [实现类] 单链表的基本思想就是用指针表示结点之间的逻辑关系,因此要正确的对指针变量.指针.指针所指结点.结点的值进行区分. 设 p 是一个指针变量,则 p 的值是一个指针,若指针 p 指向某个 No ...

  5. 遗落在时光里的静态链表(线性表的静态存储)---C语言版

    目录 静态链表的定义 静态链表的操作 初始化 求表长 分配空间 回收空间 插入操作 删除操作 其他操作 完整源代码 总结一下 众所周知,指针是c语言的灵魂,指针使得链表的实现简单明了起来. 但是问题来 ...

  6. 线性表(单链表)实验

    一.实验目的 1.线性表(LINE)的概念:数据元素之间存在着线性关系. 2.线性表的顺序表示和实现. 3.线性表的链式表示和实现. 4.线性表的基本操作:初始化.插入.修改.删除.遍历. 二.实验内 ...

  7. 2.2线性表——单链表基本操作的实现

    注意:以下内容均省略思路,只有代码和时间复杂度.此内容为本人学习过程中的一些学习记录,如有错误,恳请各位指正.建议,末学将感激不尽! 目录 用结构指针描述单链表 初始化链表 判断空表 销毁单链表 清空 ...

  8. 线性表----单链表

    一,实验内容:链表的创建.插入与删除操作 二.程序清单 三.思考 l.如果需要将新结点 插入  到     第i个数据元素之后,算法将如何改动? 2. 双向链表和循环链表的定义和构造方法. //链表的 ...

  9. 图书管理系统——C语言版

    图书管理系统: 只是一个简易版的.只是完成一些简单的增删改查的功能. 设计要求 把图书表抽象成一个线性表,每本图书(包括ISBN.书名.定价)作为线性表中的一个元素.在图书信息管理信息系统中要求实现查 ...

  10. 图书管理系统C语言版

    图书管理系统是一种用于组织.存储和管理图书相关信息的软件系统.C语言版的图书管理系统是使用C语言开发的一种图书管理软件.这种系统通常可以实现图书的借阅.归还.查询等功能,方便图书馆工作人员和读者使用.

最新文章

  1. ASP.NET Core的配置(5):配置的同步[设计篇]
  2. react native 的底部导航栏以及跳转页面带参数
  3. YoloV3网络模型搭建
  4. Java黑皮书课后题第8章:*8.30(代数:解答线性方程)编写一个方法,解答下面的2*2线性方程组系统
  5. JAVA-基础(查找文件夹内文件)
  6. php 年的第几天,收藏-php中某年第几天计算出日期年月日的代码
  7. halcon车刀崩边检测
  8. 1042: 筛法求素数
  9. 量化延时法时间测量_干货分享:直线度测量发展及几种方法详解
  10. linux路由内核实现分析(四)---路由缓存机制(4)
  11. 多对多关联映射(双向关联)见项目:me_many_to_many
  12. 卸载软件后,win10应用与功能中仍有残留,解决方案。
  13. 【分享】小工具大智慧之Sql执行工具
  14. windows ***的搭建
  15. python将变量写入文件_python 如何把变量写入文件
  16. VS2013下载网址及破解注册码
  17. CNGI高校驻地网IPv6用户数量排名
  18. 悲情陨落的十大民族品牌
  19. android 检测输入法,Android判断软键盘 输入法 是否显示
  20. 不等于在python中怎么打_在python中不等于用什么来表示

热门文章

  1. OpenLayers3基础教程——OL3 介绍interaction
  2. 各种格式ANSI,UTF8,Unicode,Unicode BigEndian的解释
  3. 服务器控件与Html控件属性值的解释差异
  4. java json 替换属性值_java字符串转json取对象和属性值问题
  5. 智能门锁电路图_科技生活|网传“小黑盒”刷开智能锁,人脸识别系统“翻脸不认人”?...
  6. emc re 整改 超标_资深EMC工程师总结:EMC整改流程及常见问题
  7. Matlab 图像像素点在RGB空间的显示
  8. getopt/getopt_long函数使用说明
  9. java end_Java Matcher end()用法及代码示例
  10. qt之tcp通信,制作简易的仿qq功能