C++练习之插入删除
#include <iostream>
#include <ctime>
#include <cstring>
#include<cstdlib>
using namespace std;typedef struct bookInfo
{char name[10];float price;int num;
}BOOKINFO;// p: 结构体数组首元素地址
// n: 有效图书数量
void Print(const BOOKINFO *p,int n)
{for (int i = 0; i < n; i++){cout<<"第"<<i+1<<"本书的信息为:"<<"名字:"<<p[i].name<<",价格:"<<p[i].price<<",数量"<<p[i].num<<endl;}}// p:结构体数组首元素地址
// p_info:要插入的图书信息
// location: 插入的位置
// n: 有效图书数量
void Insert(BOOKINFO *p,BOOKINFO *p_info,int location,int *size)
{BOOKINFO *p_i=p;//有效数量+1*size +=1;//将指针移动到最后一个有效元素位置p_i +=*size;while (p_i>p+location){*p_i=*(p_i-1);// 将前面一个元素信息覆盖当前元素信息p_i--;// 从后往前遍历赋值}*(p+location)=*p_info; // 将要插入的图书信息覆盖掉要插入位置元素信息
}// p:结构体数组首元素地址
// location: 删除的位置
// n:有效图书数量
void Delete(BOOKINFO *p,int location,int* size)
{BOOKINFO *p_i=p;//将指针移动到要删除的位置p_i +=location;// 有效数量-1*size -=1;while (p_i<p+ *size){*p_i=*(p_i+1);// 把下一个位置的元素信息覆盖掉当前位置的元素信息p_i++;}// 将最后一个位置的元素信息清空memset(p+ *size,0,sizeof(BOOKINFO));
}
int main()
{int i=0;BOOKINFO *p=new BOOKINFO[10];//先清空memset(p,0,sizeof(BOOKINFO)*10);do{cout<<"请输入第"<<i+1<<"个图书信息:";cin>>p[i].name>>p[i].price>>p[i].num;i++;} while (i<5);int n=5;Print(p,n);//插入BOOKINFO *p_info=new BOOKINFO;cout<<"请输入要插入的图书信息";cin>>p_info->name>>p_info->price>>p_info->num;int location=0;cout<<"请输入要插入的位置";cin>>location;Insert(p,p_info,location,&n);Print(p,n);cout<<"请输入要删除的位置:";cin>>location;Delete(p,location,&n);Print(p,n);delete p_info;p_info=NULL;delete[] p;p=NULL;return 0;
}