考研資料結構-線性表-順序表

Gragon_gump發表於2020-10-09

靜態分配

程式碼實現

#include <stdio.h>
#include <malloc.h> //新增malloc函式的標頭檔案
//預定義常量和型別
#define LIST_INIT_SIZE 10 //線性表的儲存空間的初始分配量

typedef int ElemType;//取別名 方便改

typedef struct{
	ElemType data[LIST_INIT_SIZE]; //用靜態的“陣列”存放資料元素
	int length;//順序表的當前長度
}SqList;//順序表的型別定義

//初始化 順序表 靜態分配
void InitList(SqList &L){
	for(int i=0;i<LIST_INIT_SIZE;i++)
		L.data[i]=0;//將所有資料元素設定預設值
	L.length=0;//順序表初始長度
}

//插入 順序表
bool ListInsert(SqList &L,int i,int e){
	if(i<1||i>L.length+1)	//判斷i的範圍是否有效
		return false;
	if(L.length>=LIST_INIT_SIZE)//當前儲存空間已滿 不能插入
		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;
}

//刪除 順序表
bool ListDelete(SqList &L,int i,int &e){
	if(i<1||i>L.length)//判斷i的範圍是否有效
		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;
}

//按位置查詢順序表
ElemType GetElem(SqList L,int i){
	return L.data[i-1];
}

//在順序表L中查詢第一個元素值等於e的元素,並返回其位序
int LocateElem(SqList L,ElemType 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(int argc, _TCHAR* argv[])
{	
	//宣告一個順序表
	SqList L;
	//初始化順序表
	InitList(L);
	//插入資料
	for(int i=1;i<LIST_INIT_SIZE;i++){
		ListInsert(L,i,i+1);
	}
	//按位查詢資料
	for(int i=1;i<=L.length;i++){
		//GetElem(L,i);//按位查詢操作,獲取表L中第i個元素的值
		printf("第%d個為%d\n",i,GetElem(L,i));
	}
	//查詢到數值8的位置
	//也可以用鍵盤輸入獲取我就不寫了
	printf("查詢到位置%d",LocateElem(L,8));

	//刪除實現
	int e=-1;//用變數e把刪除的元素帶回來
	if(ListDelete(L, 3, e))
		printf("已刪除第3個元素,刪除元素值為%d\n",e);
	else
		printf("位序不合法,刪除失敗");

	//system("pause");//讓控制檯停留
	return 0;
}

相關文章