顺序表的简单操作代码(c++实现)

#include<iostream>

using namespace std;

#define ERROR 0
#define OK 1
#define MAXSIZE 100 

typedef int Status;
typedef int ElemType;
 
typedef struct{
	ElemType *elem;
	int length;
	
}SqList;

Status InitList(SqList &L)
{//构造一个空的顺序表L 
	L.elem=new ElemType[MAXSIZE];//分配一个大小为MAXSIZE的数组空间给顺序表 
	if(!L.elem) return ERROR;//存储分配失败退出 
	L.length=0;//空表长度为0 
	return OK;
}

void ClearList(SqList &L)
{
	L.length=0;
}//清空该表

bool ListEmpty(SqList L){
	if(L.length==0) return true;
	else return false;
}//判断是否为空 是TRUE 否FALSE

int ListLength(SqList L){
	return L.length;
}//返回表L的元素个数(求长度)

Status GetElem(SqList L,int i,ElemType &e){
	if(i<1||i>L.length) return ERROR;
	e=L.elem[i-1];
	return OK;
} //把第i个元素赋给e

Status LocateElem(SqList L,ElemType e){
	int i;
	for(i=0;i<=L.length-1;i++)
	 if(L.elem[i]==e) return i+1;
	return 0;
}// 返回L中第一个与e相同的位置,没有则返回0

Status ListInsert(SqList &L,int i,ElemType e){
	if( (i<1)||(i>L.length+1) )   return ERROR;
      if(L.length == MAXSIZE)       return ERROR;
      for(int j=L.length-1 ;j>=i-1 ;j--){ 
    		L.elem[j+1] = L.elem[j];        //插入位置及之后的元素后移
      } 
	  L.elem[i-1] = e;                  //将新元素 e 放入第 i 个位置
      ++L.length;                       //表长加1
      return OK;
}//在L中第i个位置插入元素e

Status ListDelete(SqList &L,int i){
	if((i<1)||(i>L.length)) return ERROR;
 	for(int j=i;j<=L.length-1;j++) L.elem[j-1]=L.elem[j];//删除位置后面的元素前移 
 	--L.length;//表的长度减1; 
	 return OK;
}//删除L中第i个位置的元素
SqList L;
int main(void){
	int i,j; 
	
	InitList(L);
	cout<< "顺序表基本操作;\n"
	    << "操作1:创建顺序表,赋值\n"
	    << "操作2:插入元素\n"
	    << "操作3:删除元素\n"
	    << "操作4:查询元素\n"
	    << "操作5:求表长\n"
	    << "操作6:清空该表\n"
	    << "操作7:判断表是否为空\n"
		<< "操作8:退出\n";
	while(true){
		int n,t,x,tt;
	    ElemType sertnum1;
		int sertnum2,ii;
	    ElemType ss;
		cout<< "输入操作序号;";
		cin>>n; 
		switch(n){
			case 1:
				t=InitList(L);
				if(t){
				    cout<<"创建成功,请输入需要赋值的个数:";
					cin>>x;
					cout<<"请输入"<<x<<"个数字:" ;
					for(i=1;i<=x;i++){
						cin>>tt;
						ListInsert(L,i,tt);
					} 
				}
				else  cout<<"表已存在"<<endl;
				 break;	
				 	
			case 2: 
			    cout<<"请输入要插入的元素以及其位置:";
			    cin>>sertnum1>>sertnum2;
			    t=ListInsert(L,sertnum2,sertnum1);
			    if(!t) cout<<"插入失败"<<endl;
				 break;
			    
			case 3:
				cout<<"请输入需要删除元素的位置:";
				cin>>ii;
				t=ListDelete(L,ii);
				if(!t) cout<<"删除失败"<<endl;
				 break;
				
			case 4:
			    cout<<"请输入需要查询的元素:" ;
			    cin>>ss;
			    t=LocateElem(L,ss);
			    if(t) cout<<t;
			    else cout<<"查无此元素"<<end;
				 break;
			    
			case 5:
				t=ListLength(L);
				cout<<"表长为:"<<t<<endl;
				 break;
				 
			case 6:	 
			    ClearList(L);
			    cout<<"表已清空"<<endl;
				 break;
				 
			case 7:
			    t=ListEmpty(L);
				if(t) cout<<"表为空"<<endl;
				else cout<<"表非空"<<endl;	
				 break;
				   
		    case 8:
		    	exit(0);
		    	
		    default:
		    	cout<<"数字非法,请重新输入"<<endl; 					
		}
		cout<<"目前表内元素依次为:"<<endl;
		for(i=1;i<=L.length;i++){
			ElemType e;
			GetElem(L,i,e);
			cout<<e<<" ";
		}
		cout<<endl;
	}
	return 0;
}




参考书籍《数据结构》严蔚敏

发布了11 篇原创文章 · 获赞 26 · 访问量 4382

猜你喜欢

转载自blog.csdn.net/qq_45918426/article/details/104096750