线性表的顺序表示及基本操作

//--------------------------顺序表的存储结构--------------------------
#define MAXSIZE 100   //顺序表可能达到的最大长度
typedef struct{
    
    
	Elemtype *elem;    //存储空间的基地址
	int length;        //当前长度 
}SqList;               //顺序表的结构类型SqList(俗称结构名为SqList)
//----------------------多项式的顺序存储结构类型定义------------------
#define MAXSIZE 100   //多项式可能达到的最大长度
typedef struct{
    
    
	float cofe;        //系数
	int expn;          //指数   
}Polynomial;           //结构名   
typedef struct{
    
    
	Polynomial *elem;  //存储空间的基地址
	int length;        //多项式中当前项的个数 
}SqList;               //多项式的顺序存储结构类型为SqList
//---------------------图书表的顺序存储结构的类型定义----------------
#define MAXSIZE 10000 //图书表可能达到的最大长度
typedef struct{
    
    
	char no[20];       //图书ISBN(图书的编号)
	char name[50];     //图书名字
	float price;       //图示价格 
	
}Book;
typedef struct{
    
    
	Book *elem;        //存储空间的基地址   
	int length;        //图书表中当前图书的个数 
}SqList;               //图书表的顺序存储结构类型为Sqlist
//以上述定义为前提的情况下
SqList L;              //变量定义语句 
//将L定义为SqList类型的变量,便可以使用L.elem[i-1]访问表中位置序号为i的图书的相关记录

顺序表基本操作的实现

//----------------------顺序表的初始化------------------------------
Status InitList(SqList &L)
{
    
    
	L.elem=new ElemType[MAXSIZE];//为顺序表分配一个大小为MAXSIZE的数组空间 
	L.length=0;//空表长度为零
	return OK; //Status为OK 
 } 
//---------------------顺序表的取值---------------------------------
Status Getelem(SqList L,int i,ElemType &e)
{
    
    
	if(i<1||i>L.length)
		return ERROR;判断i值是否合理,若不合理返回ERROR
	e=L.elem[i-1];
	return OK;  
 } 
//--------------------顺序表的查找------------------------------
int LocateElem(SqList L,ElemType e)//按值查找
{
    
    //在顺序表中查找值为e的元素,返回其位置序号 
	for(i=0;i<L.length;i++)
		if(L.elem[i]==e)
			return i+1;//查找成功,返回位置序号i+1 
	return 0;//查找失败,返回0 
}
//-----------顺序表的插入--------------
Status ListInsert(SqList &L,int i,ElemType e)
{
    
    //在顺序表L中的第i个位置插入新元素e,i值得合法范围为1<=i<=L.length+1
	if((i<1)||(i>L.length+1)) //i值不合法 
		return ERROR;
	if(L.length==MAXSIZE)//当前存储空间已满 
		return ERROR;
	for(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;  
	}	
//-------------顺序表的删除-----------------
Status ListDelete(SqList &L,int i)
{
    
    //在顺序表L中删除第i个元素,i值得合法范围为1<=i<=L.length
 	if(i<1||i>L.length )//i值不合法 
	 	return ERROR;
	for(j=i;j<=L.length-1;j++)
		L.length[j-1]=L.length[j];//被删除元素之后的元素前移 
	--L.length;//表长减1 
	return OK; 
  } 

猜你喜欢

转载自blog.csdn.net/qq_45858803/article/details/110824330