【c++小程序】1.动态数组实现图书录入程序
来源:互联网 发布:淘宝上代购靠谱的店铺 编辑:程序博客网 时间:2024/05/18 00:38
在图书馆中经常会遇到图书信息录入的问题,在录入图书信息之前,通常不知道图书数目是多少,那么要申请多少空间来存储图书呢,你当然可以申请一个很大的空间来存储,但是这有两个问题,一是如果图书很少,那么很多空间将本浪费,二是随着后来新增图书,到了申请的空间都装不下的地步,你就不得不重新申请空间,将所有数据再录入一次(当然在实际中是不会遇到这样问题的,因为我们通常将信息存储到文件或者数据库中,这样就可以共享了,这个例子只是为了说明动态数组的作用)。有了动态数组,你将不用再担心这两个问题,你可以随着图书的增多动态申请更多空间去存储图书。一个简单的例子如下:
#include <iostream>#include <string>#define stepLength 3 //定义图书仓库长度增长步长using namespace std;typedef struct{//定义图书结构,简单起见只简单包含图书名字和价格 string name; int price;}book;int max = 3; //定义当前图书仓库最大长度int counter = 0; //当前图书仓库中的图书数目book *storage; //定义图书仓库void add(string name, int price);//定义添加图书的函数int main(){ storage = new book[max];//初始化仓库,申请能存储max个图书的空间 for (int i=0;i<=9;i++){//添加9本书 string name = "book" + to_string(i); add(name, i);//简单地使用booki和i作为参数填充书本 } cout << "+--------------book list------------+" << endl; for (int i = 0; i<counter; i++){ //打印添加的书单 cout << "| " << storage[i].name << " " << storage[i].price << endl; } system("pause");}void add(string name, int price){ if (counter < max){ //判断当前书本数目,若小于仓库大小,说明还有空间,则直接添加书籍 storage[counter].name = name; storage[counter].price = price; counter++; cout << "书籍-->name: " << name << ", price: " << price << "添加完毕..." << endl; } else{//否则,说明空间不够了,添加不进去了 cout << "空间不足,正在申请空间..." << endl; max += stepLength;//增大空间容量 book *temp = new book[max];//申请更大空间 for (int i = 0; i<counter; i++){//将原来的数据数据复制到新申请的空间中 temp[i].name = storage[i].name; temp[i].price = storage[i].price; } delete[] storage;//别忘了释放原来的空间,否则将造成内存泄漏 storage = temp;//将仓库指向新申请的空间 cout << "空间申请完毕,正在添加书籍..." << endl; add(name, price);//再添加刚刚添加不进去那本书 }}
程序中初始空间大小为3本书大小,增长步长为3,当要录入9本书是,输出为:
书籍–>name: book0, price: 0添加完毕…
书籍–>name: book1, price: 1添加完毕…
书籍–>name: book2, price: 2添加完毕…
空间不足,正在申请空间…
空间申请完毕,正在添加书籍…
书籍–>name: book3, price: 3添加完毕…
书籍–>name: book4, price: 4添加完毕…
书籍–>name: book5, price: 5添加完毕…
空间不足,正在申请空间…
空间申请完毕,正在添加书籍…
书籍–>name: book6, price: 6添加完毕…
书籍–>name: book7, price: 7添加完毕…
书籍–>name: book8, price: 8添加完毕…
空间不足,正在申请空间…
空间申请完毕,正在添加书籍…
书籍–>name: book9, price: 9添加完毕…
+————–book list————+
| book0 0
| book1 1
| book2 2
| book3 3
| book4 4
| book5 5
| book6 6
| book7 7
| book8 8
| book9 9
请按任意键继续…
可见,当录入3本书时,空间就被填满了,程序会自动申请更多空间(+3个),以满足需求,在实际中肯定不会将步长设置为3,这太短了,因为新申请一次空间的开销是很大的,需要将原来的数据从新填入新申请的空间中,步长多少还要看实际应用。
- 【c++小程序】1.动态数组实现图书录入程序
- 成绩录入修改小程序
- C语言数组小程序
- C语言动态数组程序
- C语言小程序------------数组实现栈功能(一)
- 微信小程序之小豆瓣图书Demo
- 小程序与共享图书的融合
- 递归实现回旋数组的小程序
- 第5周 经典小程序1 题 动态数组的实现
- C语言链表实现——无限录入单词程序
- 动态排序小程序
- Objective C 实现简单的小程序
- c语言实现计算器小程序
- 关于java键盘录入的字母处理小程序
- java小程序之学生信息录入界面
- C语言动态分配数组程序实现
- C程序入门小程序
- C语言实现的小项目 关机小程序
- 最新的100个微信小程序-极乐Store
- new Date(date).getTime()兼容性
- 目标跟踪VOT2016 BenchMark评价标准介绍
- 归并排序 单链表
- Redis的几种数据结构,和各自应用场景的列举示例
- 【c++小程序】1.动态数组实现图书录入程序
- Xposed 包名类名加密要如何hook?多dex如何查找对应的方法?
- 安卓巨图加载及触摸拖动浏览,仿鸿洋大神使用BitmapRegionDecoder。
- oracle11g 修改字符集 修改为ZHS16GBK
- 如何利用缺陷的管理提高软件开发质量三 -如何利用时间点发现缺陷数
- MySQL错误ERROR 2002 (HY000): Can't connect to local MySQL server through socket
- MySQL常用的面试题
- 60_数组_多维数组_基本语法_内存分析
- Linux 下安装Redis异常处理及安装