线性表之顺序表的实现

#include <iostream>
using namespace std;

// 顺序表的结构体
#define MAXSIZE 50

// 数据元素结构体
typedef struct 
{
	int x;
}ElemType;
 
// 静态顺序表 
typedef struct 
{
	ElemType data[MAXSIZE];//数据 
	int length;//数据大小 
}SqList; 

class MySqList{
public:
	MySqList(){
		l.length=0;
		cout<<"初始化完成"<<endl;
	}
	void Travel();//遍历顺序表
	bool ListInert(int loc,ElemType e);//插入数据 
	bool ListDelete(int loc,ElemType &e);//删除数据 
	int LocateElem(ElemType e);//确定元素位置 
	void chice();//功能选择 
private:
	SqList l;
};

//遍历顺序表
void MySqList::Travel(){
	for(int i=0;i<l.length;i++){
		cout<<l.data[i].x<<" ";
	}
	cout<<endl<<"=========================="<<endl;
} 

// 插入数据 
bool MySqList::ListInert(int loc,ElemType e){
	//判断插入位置是否错误
	if(loc<0||loc>l.length+1){
		return false;
	} 
	//判断顺序表是否满
	if(l.length>=MAXSIZE){
		return false;
	} 
	//可以插入右移 
	for(int i=l.length;i>=loc;i--){
		l.data[i]=l.data[i-1];
	} 
	//插入 
	l.data[loc-1]=e;
	l.length++;
	return true;
}

// 删除数据 
bool MySqList::ListDelete(int loc,ElemType &e){
	//判断删除位置是否错误
	if(loc<1||loc>l.length){
		return false;
	} 
	//删除数据的值
	e=l.data[loc-1];
	//左移
	for(int i=loc-1;i<l.length-1;i++){
		l.data[i]=l.data[i+1];
	} 
	l.length--;
	return true;
}  

//确定元素位置
int MySqList::LocateElem(ElemType e){
	for(int i=0;i<l.length;i++){
		if(l.data[i].x==e.x){
			return i+1;
		}
	}
	return 0;
}
//功能选择
void MySqList::chice(){
	while(true){
		cout<<"0-----退出"<<endl;
		cout<<"1-----遍历"<<endl;
		cout<<"2-----插入"<<endl;
		cout<<"3-----删除"<<endl;
		cout<<"4-----确定元素位置"<<endl;
		cout<<"请输入功能选择"<<endl;
		int c;
		cin>>c; 
		int loc;
		ElemType e;
		switch(c){
			case 0:
				cout<<"退出程序"<<endl;
				return;
			case 1:
				Travel();
				break;
			case 2:
				cout<<"请输入插入位置"<<endl;
				cin>>loc;
				cout<<"请输入数据"<<endl;
				cin>>e.x;
				ListInert(loc,e);
				break; 
			case 3:
				cout<<"请输入删除位置"<<endl;
				cin>>loc;
				cout<<"删除元素为"<<endl;
				ListDelete(loc,e);
				cout<<e.x;
				break;
            case 4:
            	cout<<"请输入元素"<<endl;
            	cin>>e.x;
            	cout<<"元素位置为"<<LocateElem(e)<<endl;
            	break;
            default:
            	cout<<"输入格式不正确"<<endl;
            	break;
		}
	}
	
}
int main()
{
	MySqList l;
	l.chice();
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Who_Am_I.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值