C語(yǔ)言線性表實(shí)現(xiàn):順序表-創(chuàng)新互聯(lián)

文章目錄:
  • 概念理解:
  • 1. 動(dòng)態(tài)順序表結(jié)構(gòu)體:
  • 2. 順序表動(dòng)態(tài)初始化:
  • 3. 順序表擴(kuò)容:
  • 4. 插入:
  • 5. 刪除:
  • 6. 按位序查找:
  • 7. 按值查找:
  • 8. 輸出順序表:
  • 9. 判斷順序表是否相等:
  • 10.測(cè)試:

目前累計(jì)服務(wù)客戶成百上千家,積累了豐富的產(chǎn)品開(kāi)發(fā)及服務(wù)經(jīng)驗(yàn)。以網(wǎng)站設(shè)計(jì)水平和技術(shù)實(shí)力,樹(shù)立企業(yè)形象,為客戶提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。成都創(chuàng)新互聯(lián)始終以務(wù)實(shí)、誠(chéng)信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過(guò)對(duì)領(lǐng)先技術(shù)的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究、對(duì)客戶形象的視覺(jué)傳遞、對(duì)應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。概念理解:

線性表:一種邏輯結(jié)構(gòu)。
順序表:采用順序存儲(chǔ)方式實(shí)現(xiàn)的線性表。

位序:從1開(kāi)始。
數(shù)組下標(biāo):從0開(kāi)始。

&引用符的使用:
函數(shù)參數(shù)帶&和不帶&的區(qū)別。

malloc:申請(qǐng)一整片連續(xù)的存儲(chǔ)空間,返回一個(gè)指向該空間首地址的指針。
free:釋放一整片連續(xù)的存儲(chǔ)空間。

1. 動(dòng)態(tài)順序表結(jié)構(gòu)體:
//順序表的動(dòng)態(tài)分配
#define InitSize 10 //初始大小
typedef struct{int* data;//指針,指向動(dòng)態(tài)分配的內(nèi)存空間的首地址
	int length;//該順序表的長(zhǎng)度
	int MaxSize;//該順序表的大長(zhǎng)度
}SeqList;
2. 順序表動(dòng)態(tài)初始化:
void InitList(SeqList &L){//初始化順序表,包括給順序表L動(dòng)態(tài)分配內(nèi)存空間,設(shè)置順序表當(dāng)前長(zhǎng)度為0,設(shè)置順序表大長(zhǎng)度100
	L.data = (int*)malloc(sizeof(int) * InitSize);
	L.length = 0;
	L.MaxSize = 100;	
}
3. 順序表擴(kuò)容:
void IncreaseSize(SeqList &L,int len){//順序表擴(kuò)容
	int* p = L.data;//創(chuàng)建一個(gè)指針指向順序表當(dāng)前內(nèi)存空間的首地址,方便回收
	L.data = (int*)malloc(sizeof(int) * (L.MaxSize+len));//重新請(qǐng)求一塊更大的內(nèi)存空間分配給該順序表
	L.MaxSize += len;//修改順序表大長(zhǎng)度
	for(int i=0;i<=L.length;i++){L.data[i] = p[i];//將原內(nèi)存空間中的數(shù)據(jù)復(fù)制到新申請(qǐng)的空間中
	}
	free(p);//釋放原來(lái)的內(nèi)存空間
}
4. 插入:
bool ListInsert(SeqList &L,int i,int e){//插入元素e到順序表位序?yàn)閕的位置
	if(i<1 || i>L.length+1){//判斷插入位置是否合法
		return false;
	}
	if(L.length == L.MaxSize){//判斷順序表是否已滿
		return false;
	}
	for(int j=L.length;j<=i;j++){//i位置及之后的元素后移一位(這里注意區(qū)分位序和數(shù)組下標(biāo)的關(guān)系)
		L.data[j] = L.data[j-1];
	}
	L.data[i-1] = e;//插入數(shù)據(jù)
	L.length++;//注意別忘了順序表長(zhǎng)度+1
	return true;
}
5. 刪除:
bool ListDelete(SeqList &L,int i,int &e){//刪除順序表為序?yàn)閕的數(shù)據(jù)元素,并將該元素的值賦給e
	if(i<1 || i>L.length){return false;
	}
	e = L.data[i-1];//將被刪除的元素的值賦值給e
	for(int j=i;j//位序i之后的元素前移
		L.data[j-1] = L.data[j];
	}
	L.length--;//注意別忘了順序表長(zhǎng)度-1
	return true;
}
6. 按位序查找:
int getElem(SeqList L,int i){//按位序查找,返回該位序上的元素
	if(i<1 || i>L.length){//判斷位置是否合法
		return -1;
	}
	return L.data[i-1];
}	
7. 按值查找:
int LocateElem(SeqList L,int e){//按值查找,返回該值的位序
	for(int j=0;jif(L.data[j] == e){	return j+1;//返回的是位序
		}
	}
	return -1;
}
8. 輸出順序表:
void printList(SeqList L){//輸出順序表的元素
	printf("[");
	for(int i=0;iprintf("%d ",L.data[i]);
	}
	printf("]\n");
}
9. 判斷順序表是否相等:
bool equalsList(SeqList L1,SeqList L2){//判斷順序表內(nèi)容是否相同
	if(L1.MaxSize == L2.MaxSize){if(L1.length == L2.length){	for(int i=0;i		if(L1.data[i] == L2.data[i]){continue;
				}
			}
		}
		return true;
	}
	return false;
}
10.測(cè)試:
#include#include//使用malloc和free關(guān)鍵字需要引入這個(gè)庫(kù)

//順序表的動(dòng)態(tài)分配
#define InitSize 10 //初始大小
typedef struct{int* data;//指針,指向動(dòng)態(tài)分配的內(nèi)存空間的首地址
	int length;//該順序表的長(zhǎng)度
	int MaxSize;//該順序表的大長(zhǎng)度
}SeqList;

void InitList(SeqList &L){//初始化順序表,包括給順序表L動(dòng)態(tài)分配內(nèi)存空間,設(shè)置順序表當(dāng)前長(zhǎng)度為0,設(shè)置順序表大長(zhǎng)度100
	L.data = (int*)malloc(sizeof(int) * InitSize);
	L.length = 0;
	L.MaxSize = 100;	
}

void IncreaseSize(SeqList &L,int len){//順序表擴(kuò)容
	int* p = L.data;//創(chuàng)建一個(gè)指針指向順序表當(dāng)前內(nèi)存空間的首地址,方便回收
	L.data = (int*)malloc(sizeof(int) * (L.MaxSize+len));//重新請(qǐng)求一塊更大的內(nèi)存空間分配給該順序表
	L.MaxSize += len;//修改順序表大長(zhǎng)度
	for(int i=0;i<=L.length;i++){L.data[i] = p[i];//將原內(nèi)存空間中的數(shù)據(jù)復(fù)制到新申請(qǐng)的空間中
	}
	free(p);//釋放原來(lái)的內(nèi)存空間
}

bool ListInsert(SeqList &L,int i,int e){//插入元素e到順序表位序?yàn)閕的位置
	if(i<1 || i>L.length+1){//判斷插入位置是否合法
		return false;
	}
	if(L.length == L.MaxSize){//判斷順序表是否已滿
		return false;
	}
	for(int j=L.length;j<=i;j++){//i位置及之后的元素后移一位(這里注意區(qū)分位序和數(shù)組下標(biāo)的關(guān)系)
		L.data[j] = L.data[j-1];
	}
	L.data[i-1] = e;//插入數(shù)據(jù)
	L.length++;//注意別忘了順序表長(zhǎng)度+1
	return true;
}

bool ListDelete(SeqList &L,int i,int &e){//刪除順序表為序?yàn)閕的數(shù)據(jù)元素,并將該元素的值賦給e
	if(i<1 || i>L.length){return false;
	}
	e = L.data[i-1];//將被刪除的元素的值賦值給e
	for(int j=i;j//位序i之后的元素前移
		L.data[j-1] = L.data[j];
	}
	L.length--;//注意別忘了順序表長(zhǎng)度-1
	return true;
}

int getElem(SeqList L,int i){//按位序查找,返回該位序上的元素
	if(i<1 || i>L.length){//判斷位置是否合法
		return -1;
	}
	return L.data[i-1];
}	
 
int LocateElem(SeqList L,int e){//按值查找,返回該值的位序
	for(int j=0;jif(L.data[j] == e){	return j+1;//返回的是位序
		}
	}
	return -1;
}

void printList(SeqList L){//輸出順序表的元素
	printf("[");
	for(int i=0;iprintf("%d ",L.data[i]);
	}
	printf("]\n");
}

bool equalsList(SeqList L1,SeqList L2){//判斷順序表內(nèi)容是否相同
	if(L1.MaxSize == L2.MaxSize){if(L1.length == L2.length){	for(int i=0;i		if(L1.data[i] == L2.data[i]){continue;
				}
			}
		}
		return true;
	}
	return false;
}

int main(){SeqList L1;//聲明一個(gè)順序表
	InitList(L1);//初始化順序表
	
	//初始化、擴(kuò)容測(cè)試
	printf("順序表當(dāng)前內(nèi)存空間的首地址:%d\n",&L1.data[0]);
	printf("順序表當(dāng)前大長(zhǎng)度:%d\n",L1.MaxSize);
	IncreaseSize(L1,5);//擴(kuò)容順序表,擴(kuò)容長(zhǎng)度為5
	printf("順序表當(dāng)前內(nèi)存空間的首地址:%d\n",L1.data);
	printf("順序表當(dāng)前大長(zhǎng)度:%d\n",L1.MaxSize);
	
	//插入、輸出測(cè)試
	ListInsert(L1,1,5);
	printList(L1);
	
	//按位查找、按值查找測(cè)試
	printf("順序表中位序?yàn)?的元素為:%d\n",getElem(L1,1));
	printf("順序表中元素5的位序?yàn)椋?d\n",LocateElem(L1,5));
	
	//刪除測(cè)試
	int a;
	ListDelete(L1,1,a);
	printf("刪除的元素為:%d\n",a);
	printList(L1);
	
	//判斷順序表數(shù)據(jù)相等測(cè)試
	SeqList L2;//聲明一個(gè)順序表
	InitList(L2);//初始化順序表	
	ListInsert(L1,1,3);
	ListInsert(L2,1,8);
	printf("順序表L1和L2是否相等:%d\n",equalsList(L1,L2));
	ListDelete(L1,1,a);
	ListInsert(L1,1,8);
	IncreaseSize(L2,5);
	printf("順序表L1和L2是否相等:%d\n",equalsList(L1,L2));
	
	return 0;
}

在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁(yè)題目:C語(yǔ)言線性表實(shí)現(xiàn):順序表-創(chuàng)新互聯(lián)
URL標(biāo)題:http://muchs.cn/article18/djiedp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、企業(yè)建站移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站收錄外貿(mào)網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管