天天看點

線性表的順序表示及基本操作

//--------------------------順序表的存儲結構--------------------------
#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; 
  } 
           

繼續閱讀