#include<bits/stdc++.h>
//顺序表:初始化、创建()、取值、查询、插入、删除、销毁、清空、求长度、判断空、排序、修改、去重、遍历
using namespace std;
#define Maxsize 100
typedef struct
{
string id;
double price;
}book;
typedef struct
{
book *elem; //存储空间的基地址
int length; //图书表中当前图书个数
}SqList;
//初始化
void Init(SqList &l){
//构造一个空表==>生成一个空结点or空的空间返回首地址
l.elem = new book[Maxsize];
if(!l.elem) exit(0);//分配空间要判断其分配是否成功
l.length = 0;//表长设为0
}
//创建
void Creat(SqList &l){
//顺序表的创建类似数组,存储空间连续
int n;
cout<<"输入顺序表长度:";
cin>>n;
l.length = n;//表长为n,一般来讲有范围限制的变量可以判断其是否超出范围
for(int i=0;i<n;i++){
cout<<"输入第"<<i+1<<"个信息:";
cin>>l.elem[i].id>>l.elem[i].price;
}
}
//插入
void Insert(SqList &l,int pos,book e){
if(l.length==Maxsize) exit(0);//判断是否顺序表已满
if(pos<1 || pos>l.length) exit(0);//判断插入位置是否合法
//将插入位置之后的元素往后挪,为新元素插入腾空间
for(int i=l.length-1;i>=pos-1;i++){
//从后向前
l.elem[i+1] = l.elem[i];
}
l.length++;//表长加一
}
//删除
void Delete(SqList &l,int pos){
if(l.length) exit(0); //判断表是否为空
if(pos<1 || pos>l.length) exit(0);//判断插入位置是否合法
//将删除元素之后的元素向前挪,覆盖前一位
for(int i=pos;i<l.length;i++){
//从前向后
l.elem[i-1] = l.elem[i];
}
l.length--;//表长减一
}
//取值
void GetElem(SqList l,int pos,book &e){
//根据位置i,获取相应信息
if(pos<1 || pos>l.length) exit(0);//判断位置是否合法
e = l.elem[pos-1];
}
//查询
int Search(SqList l,book e){
//遍历找到信息后返回位置
for(int i=0;i<l.length;i++){
//if(l.elem[i]==e) 错误,因为存储地址不同,只是数据相同
if(l.elem[i].id==e.id)
return i+1;
}
return 0;
}
//去重
void Dedup(SqList &l){
//与冒泡类似
for(int i=0; i<l.length-1 ;i++){
for(int j=i+1;j<l.length;j++){
if(l.elem[i].price == l.elem[j].price){
Delete(l,i+1);
}
}
}
}
//修改
void Revise(SqList &l){
//此处举例为修改相应位置信息
int pos;
cout<<"位置:";
cin>>pos;
if(pos<1 || pos>l.length) exit(0);//判断位置是否合法
string n;
double p;
cout<<"信息:";
cin>>n>>p;
l.elem[pos-1].id = n;
l.elem[pos-1].price = p;
}
//遍历
void Traversal(SqList l){
//与数组类似
for(int i=0;i<l.length;i++){
cout<<l.elem[i].id<<" "<<l.elem[i].price<<endl;
}
}
//求长度
int Length(SqList l){
//返回表长
return l.length;
}
//判断空
bool Empty(SqList l){
//表长为零,表空
if(l.length==0) return 1;
return 0;
}
//清空
void Clear(SqList &l){
//将表长设为0
l.length = 0;
}
//销毁
void Destory(SqList &l){
//若该顺序表存在,释放存储空间
if(l.elem) delete []l.elem;
}
//排序
void Sort(SqList &l){
//冒泡排序
for(int i=0; i<l.length-1 ;i++){
for(int j=i+1;j<l.length;j++){
if(l.elem[i].price > l.elem[j].price){
swap(l.elem[i],l.elem[j]);
}
}
}
}
int main(){
//调用函数
return 0;
}
顺序表的基本操作(代码)
于 2023-10-30 20:01:24 首次发布