順序表基本操作的代碼實現

順序表基本操作的代碼實現

初始化

靜態分配方式
#include <stdio.h>
#define MaxSize 10 	//定義最大長度

typedef struct{
	int data[MaxSize];	//存放數據元素 
	int length;	//當前長度 
}SqList;	//順序表的類型定義 

/**
* 初始化函數 
*
* @param L 順序表指針 
*/
void InitList(SqList &L){
	for(int i=0; i<MaxSize; i++)
		L.data[i]=0; //初始化爲0 
	L.length=0; //初始長度爲0 
}


int main(){
	SqList L;
	InitList(L);
	
	for(int i=0; i<MaxSize; i++)
		printf("%d ", L.data[i]);
	
	printf("length=%d", L.length);
	
	return 0;
}

輸出

0 0 0 0 0 0 0 0 0 0 length=0
--------------------------------
Process exited with return value 0
Press any key to continue . . .
動態分配方式
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10 //默認最大長度

typedef struct{
	int *data;	//指示動態分配數組的指針 
	int MaxSize; //最大容量 
	int length; //順序表的當前長度 
}SeqList; 

/**
* 初始化 
*
* @param L 順序表指針 
*/
void InitList(SeqList &L){
	//用 malloc 函數申請一片連續的存儲空間 
	L.data=(int *)malloc(InitSize*sizeof(int));
	L.length=0;
	L.MaxSize=InitSize;
	
	for(int i=0; i<InitSize; i++)
		L.data[i]=0; //初始化爲0 
}

/**
* 動態增加數組長度 
*
* @param L 順序表指針 
* @param len 增加的長度
*/
void IncreaseSize(SeqList &L, int len){
	int *p=L.data;
	L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
	
	for(int i=0; i<L.length; i++){
		L.data[i]=p[i];	//將數據複製到新區域 
	}
	
	L.MaxSize=L.MaxSize+len; //擴大長度 
	free(p); //釋放原來的內存空間 
} 

int main(){
	SeqList L;
	InitList(L);
	
	for(int i=0; i<L.MaxSize; i++)
		printf("%d ", L.data[i]);
	printf("\n原來size=%d", L.MaxSize);
	
	IncreaseSize(L, 5);
	printf("\n當前size=%d\n", L.MaxSize);
	
	return 0;
}

輸出

0 0 0 0 0 0 0 0 0 0
原來size=10
當前size=15

--------------------------------
Process exited with return value 0
Press any key to continue . . .

插入

/**
* 插入
*
* @param L 順序表指針
* @param i 插入的位置,即位序i 
* @param e 插入值 
* @return 是否插入成功 
*/
bool ListInsert(SqList &L, int i, int e){
	if(i<1 || i>L.length+1)
		return false;
	if(L.length>=MaxSize)
		return false;
	
	for(int j=L.length; j>=i; j--)//將第i個元素及之後的元素後移 
		L.data[j]=L.data[j-1];
	L.data[i-1]=e; //在位置i處放入e 
	L.length++; //長度加1 
	return true;
}
操作小記

代碼

#include <stdio.h>
#define MaxSize 10 	//定義最大長度

typedef struct{
	int data[MaxSize];	//存放數據元素 
	int length;	//當前長度 
}SqList;	//順序表的類型定義 



/**
* 初始化 
*
* @param L 順序表指針
*/
void InitList(SqList &L){
	for(int i=0; i<MaxSize; i++)
		L.data[i]=0; //初始化爲0 
	L.length=0; //初始長度爲0 
}

/**
* 插入
*
* @param L 順序表指針
* @param i 插入的位置,即位序i 
* @param e 插入值 
* @return 是否插入成功 
*/
bool ListInsert(SqList &L, int i, int e){
	if(i<1 || i>L.length+1)
		return false;
	if(L.length>=MaxSize)
		return false;
	
	for(int j=L.length; j>=i; j--)//將第i個元素及之後的元素後移 
		L.data[j]=L.data[j-1];
	L.data[i-1]=e; //在位置i處放入e 
	L.length++; //長度加1 
	return true;
}

int main(){
	SqList L;
	InitList(L);
	
	ListInsert(L, 1, 3);
	ListInsert(L, 1, 2);
	
	for(int i=0; i<MaxSize; i++)
		printf("%d ", L.data[i]);
	
	return 0;
}

效果:

2 3 0 0 0 0 0 0 0 0
--------------------------------
Process exited with return value 0
Press any key to continue . . .

刪除

/**
* 刪除
*
* @param L 順序表指針
* @param i 輸出的位置,即位序i 
* @param e 刪除的值 
* @return 是否插入成功 
*/
bool ListDelete(SqList &L, int i, int &e){
	if(i<1 || i>L.length)
		return false;
		
	e=L.data[i-1]; //將被刪除的元素賦值給e 
	
	for(int j=i; j<L.length; j++) //將第i個位置後的元素前移 
		L.data[j-1]=L.data[j];
	L.length--;  //線性表長度減1 
	
	return true;
}
操作小記

代碼

#include <stdio.h>
#define MaxSize 10 	//定義最大長度

typedef struct{
	int data[MaxSize];	//存放數據元素 
	int length;	//當前長度 
}SqList;	//順序表的類型定義 



/**
* 初始化 
*
* @param L 順序表指針
*/
void InitList(SqList &L){
	for(int i=0; i<MaxSize; i++)
		L.data[i]=0; //初始化爲0 
	L.length=0; //初始長度爲0 
}

/**
* 插入
*
* @param L 順序表指針
* @param i 插入的位置,即位序i 
* @param e 插入值 
* @return 是否插入成功 
*/
bool ListInsert(SqList &L, int i, int e){
	if(i<1 || i>L.length+1)
		return false;
	if(L.length>=MaxSize)
		return false;
	
	for(int j=L.length; j>=i; j--)//將第i個元素及之後的元素前移 
		L.data[j]=L.data[j-1];
	L.data[i-1]=e; //在位置i處放入e 
	L.length++; //長度加1 
	return true;
}

/**
* 刪除
*
* @param L 順序表指針
* @param i 輸出的位置,即位序i 
* @param e 刪除的值 
* @return 是否插入成功 
*/
bool ListDelete(SqList &L, int i, int &e){
	if(i<1 || i>L.length)
		return false;
		
	e=L.data[i-1]; //將被刪除的元素賦值給e 
	
	for(int j=i; j<L.length; j++) //將第i個位置後的元素前移 
		L.data[j-1]=L.data[j];
	L.length--;  //線性表長度減1 
	
	return true;
}

int main(){
	SqList L;
	InitList(L);
	
	ListInsert(L, 1, 3);
	ListInsert(L, 1, 2);
	
	for(int i=0; i<MaxSize; i++)
		printf("%d ", L.data[i]);
	
	int e=-1;
	ListDelete(L, 1, e);
	printf("\nres=%d\n", e);
	
	for(int i=0; i<MaxSize; i++)
		printf("%d ", L.data[i]);
	
	return 0;
}

效果

2 3 0 0 0 0 0 0 0 0
res=2
3 3 0 0 0 0 0 0 0 0
--------------------------------
Process exited with return value 0
Press any key to continue . . .

查找

按位查找
/**
* 按位查找
*
* @param L 順序表指針
* @param i 位序i  
* @return 該位置的值
*/
int GetElem(SqList L, int i){
	return L.data[i-1];
}
操作小記

代碼

#include <stdio.h>
#define MaxSize 10 	//定義最大長度

typedef struct{
	int data[MaxSize];	//存放數據元素 
	int length;	//當前長度 
}SqList;	//順序表的類型定義 



/**
* 初始化 
*
* @param L 順序表指針
*/
void InitList(SqList &L){
	for(int i=0; i<MaxSize; i++)
		L.data[i]=0; //初始化爲0 
	L.length=0; //初始長度爲0 
}

/**
* 插入
*
* @param L 順序表指針
* @param i 插入的位置,即位序i 
* @param e 插入值 
* @return 是否插入成功 
*/
bool ListInsert(SqList &L, int i, int e){
	if(i<1 || i>L.length+1)
		return false;
	if(L.length>=MaxSize)
		return false;
	
	for(int j=L.length; j>=i; j--)//將第i個元素及之後的元素前移 
		L.data[j]=L.data[j-1];
	L.data[i-1]=e; //在位置i處放入e 
	L.length++; //長度加1 
	return true;
}

/**
* 按位查找
*
* @param L 順序表指針
* @param i 位序i 
* @return 該位置的值
*/
int GetElem(SqList L, int i){
	return L.data[i-1];
}

int main(){
	SqList L;
	InitList(L);
	
	ListInsert(L, 1, 3);
	ListInsert(L, 1, 2);
	
	for(int i=0; i<MaxSize; i++)
		printf("%d ", L.data[i]);

	printf("\n第一個值爲:%d", GetElem(L, 1)); 
	
	return 0;
}

效果

2 3 0 0 0 0 0 0 0 0
第一個值爲:2
--------------------------------
Process exited with return value 0
Press any key to continue . . .
按值查找
/**
* 按值查找
*
* @param L 順序表指針
* @param e 獲取的值 
* @return 該值的位序 
*/
int LocateElem(SqList L, int e){
	for(int i=0; i<L.length; i++)
		if(L.data[i]==e)
			return i+1;	//數組下標爲i的元素值等於e,返回其位序i+1 
	
	return 0; //退出循環,說明查找失敗 
}
操作小記

代碼

#include <stdio.h>
#define MaxSize 10 	//定義最大長度

typedef struct{
	int data[MaxSize];	//存放數據元素 
	int length;	//當前長度 
}SqList;	//順序表的類型定義 



/**
* 初始化 
*
* @param L 順序表指針
*/
void InitList(SqList &L){
	for(int i=0; i<MaxSize; i++)
		L.data[i]=0; //初始化爲0 
	L.length=0; //初始長度爲0 
}

/**
* 插入
*
* @param L 順序表指針
* @param i 插入的位置,即位序i 
* @param e 插入值 
* @return 是否插入成功 
*/
bool ListInsert(SqList &L, int i, int e){
	if(i<1 || i>L.length+1)
		return false;
	if(L.length>=MaxSize)
		return false;
	
	for(int j=L.length; j>=i; j--)//將第i個元素及之後的元素前移 
		L.data[j]=L.data[j-1];
	L.data[i-1]=e; //在位置i處放入e 
	L.length++; //長度加1 
	return true;
}

/**
* 按值查找
*
* @param L 順序表指針
* @param e 獲取的值 
* @return 該值的位序 
*/
int LocateElem(SqList L, int e){
	for(int i=0; i<L.length; i++)
		if(L.data[i]==e)
			return i+1;	//數組下標爲i的元素值等於e,返回其位序i+1 
	
	return 0; //退出循環,說明查找失敗 
}

int main(){
	SqList L;
	InitList(L);
	
	ListInsert(L, 1, 3);
	ListInsert(L, 1, 2);
	
	for(int i=0; i<MaxSize; i++)
		printf("%d ", L.data[i]);

	printf("\n元素值爲3的位序:%d", LocateElem(L, 3)); 
	
	return 0;
}

效果

2 3 0 0 0 0 0 0 0 0
元素值爲3的位序:2
--------------------------------
Process exited with return value 0
Press any key to continue . . .

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章