编程实现c++顺序表
主要功能
初始化 | 查找 | 插入 | 删除 | 合并 |
代码
#include <iostream>
using namespace std;
#define MaxSize 100
typedef struct//封装顺序表
{
int *data;//也可int data[MaxSize];
int length;
}SXList;
bool InitList(SXList &L){//顺序表的初始化
L.data=new int[MaxSize];//动态数组
if(L.data==NULL)
return false;
L.length=0;
return true;
}
void Input(SXList &L,int n){//输入n个数据给顺序表
if(n>MaxSize)
cout<<"超出容量!"<<endl;
for(int i=0;i<n;i++){
cin>>L.data[i];
}
L.length=n;
}
void Output(SXList L){//顺序表的输出length个数据
cout<<"存储数据如下:"<<endl;
for(int i=0;i<L.length;i++){
cout<<L.data[i]<<" ";
}
}
int Find(SXList L,int n){//取第i个位置的元素
if(n<=0||n>L.length)
cout<<"该位置没有数据"<<endl;
return L.data[n-1];
}
bool Insert(SXList &L,int n,int m){//插入
if(L.length>MaxSize){
cout<<"空间不足!"<<endl;
return false;
}
if(n>L.length+1||n<=0){
cout<<"插入位置错误!"<<endl;
return false;
}
for(int i=L.length-1;i>=n-1;i--){
L.data[i+1]=L.data[i];
}
L.data[n-1]=m;
L.length++;
return true;
}
void Delete1(SXList &L,int n){//删除某一元素
int m=L.length;
for(int i=0;i<L.length;i++){
if(L.data[i]==n)
L.length--;
}
if(L.length==m)
cout<<"顺序表中没有该元素!"<<endl;
for(int i=0;i<m;i++){
if(L.data[i]==n){
for(int j=i;j<m-1;j++){
L.data[j]=L.data[j+1];
}
}
}
}
bool Delete2(SXList &L,int n){//删除某位置的元素
if(n>L.length||n<=0){
cout<<"该位置没有元素!"<<endl;
return false;
}
for(int i=n-1;i<L.length-1;i++){
L.data[i]=L.data[i+1];
}
L.length--;
return true;
}
void Merge(SXList &L1,SXList L2){//合并两个顺序表
int n=L1.length;
L1.length+=L2.length;
for(int i=n;i<L1.length;i++){
L1.data[i]=L2.data[i-n];
}
}
int main(){
int c;
do{
SXList L1,L2;
cout<<endl;
cout<<"\t 1顺序表的初始化"<<endl;
cout<<"\t 2顺序表的输入"<<endl;
cout<<"\t 3顺序表的输出"<<endl;
cout<<"\t 4顺序表的位置查找"<<endl;
cout<<"\t 5顺序表的位置插入"<<endl;
cout<<"\t 6顺序表删除某个元素"<<endl;
cout<<"\t 7顺序表的按位置删除"<<endl;
cout<<"\t 8两个有序表的合并"<<endl;
cout<<"\t 0退出操作"<<endl;
cin>>c;
if(c==1)
InitList(L1);
else if(c==2){
int n;
cout<<"请输入数据:"<<endl;
cin>>n;
Input(L1,n);
}
else if(c==3){
Output(L1);
}
else if(c==4){
cout<<"请输入需要查找的元素位置:"<<endl;
int n;
cin>>n;
cout<<"在第"<<n<<"位的元素为:"<<endl;
cout<<Find(L1,n)<<endl;
}
else if(c==5){
cout<<"请输入插入的位置及数据:"<<endl;
int n,m;
cin>>n>>m;
Insert(L1,n,m);
}
else if(c==6){
int n;
cout<<"请输入想要删除的元素:"<<endl;
cin>>n;
Delete1(L1,n);
}
else if(c==7){
int n;
cout<<"请输入删除的位置:"<<endl;
cin>>n;
Delete2(L1,n);
}
else if(c==8){
cout<<"请输入想要合并的另一个顺序表:"<<endl;
InitList(L2);
int n;
cin>>n;
Input(L2,n);
Merge(L1,L2);
}
}
while(c!=0);
return 0;
}