算法與數(shù)據(jù)結(jié)構(gòu)---順序表-創(chuàng)新互聯(lián)

前言

本文章為觀看如下視頻所寫:

創(chuàng)新互聯(lián)公司主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁視覺設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、成都營銷網(wǎng)站建設(shè)、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)公司手機(jī)網(wǎng)站制作、微商城、網(wǎng)站托管及成都網(wǎng)站維護(hù)、WEB系統(tǒng)開發(fā)、域名注冊、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為混凝土攪拌罐行業(yè)客戶提供了網(wǎng)站營銷服務(wù)。

?3.順序表代碼演示_嗶哩嗶哩_bilibili

數(shù)據(jù)結(jié)構(gòu)=結(jié)構(gòu)定義+結(jié)構(gòu)操作?

針對此線性表

1、size代表當(dāng)前線性表的總大小,最多存儲(chǔ)多少個(gè)元素。

2、length代表當(dāng)前線性表一共存儲(chǔ)的元素個(gè)數(shù)。

3、data_type代表當(dāng)前線性表存儲(chǔ)的每個(gè)元素的數(shù)據(jù)類型。


一、順序表操作的相關(guān)代碼
#include#include#include//類型定義 
typedef struct Vector{
     int *data;
	 int size,length;	
}Vector;
//初始化創(chuàng)建一個(gè)存儲(chǔ)n個(gè)元素的順序表 
Vector *init(int n){
	Vector *vec=(Vector *)malloc(sizeof(Vector));
	vec->data=(int *)malloc(sizeof(int)*n);
	vec->size=n;
	vec->length=0;//代表順序表沒有儲(chǔ)存任何元素 
	return vec; 
}
//順序表的插入操作
int insert(Vector *vec,int ind,int val){
	//去除非法性操作 
	if(vec==NULL) return 0;
	if(vec->length==vec->size) return 0;
	if(ind<0||ind>vec->length) return 0;
	//插入操作 
	for(int i=vec->length;i>ind;i--){
		vec->data[i]=vec->data[i-1];
	} 
	vec->data[ind]=val;
	vec->length+=1;
	return 1;
} 
//順序表的刪除操作
int erase(Vector *vec,int ind){
	//去除非法性操作
	if(vec==NULL) return 0;
	if(vec->length==0) return 0;
	if(ind<0||ind>=vec->length) return 0;
	//刪除操作‘
	for(int i=ind+1;ilength;i++){
		vec->data[i-1]=vec->data[i];
	} 
	vec->length-=1;
	return 1;
}
//順序表銷毀
void clear(Vector *vec){
	if(vec==NULL) return ;//順序表為空直接返回
	free(vec->data);
	free(vec);
	return ; 
} 
//輸出順序表
void output(Vector *vec){
	printf("Vector(%d)=[",vec->length);
	for(int i=0;ilength;i++){
		if(i!=0) printf(", ");   //輸出兩個(gè)及以上元素用“,”隔開 
		printf("%d",vec->data[i]); 
	}
	printf("]\n");
	return ;
} 
int main()
{  srand(time(0));
   #define MAX_OP 20
   Vector *vec=init(MAX_OP);
   int op,ind,val;
   //隨機(jī)產(chǎn)生20個(gè)元素 
   for(int i=0;ilength+1);
   	  val=rand()%100;
   	  switch(op){
   	  	//op為0,2,3執(zhí)行插入操作,75%概率插入 
		case 3:
		case 2: 
		case 0:{ 
   	  	        printf("insert %d at %d to vector\n",val,ind);
   	  	        insert(vec,ind,val);
				break;
			 }
   	  	//op為1執(zhí)行刪除操作 ,25%概率刪除 
		case 1:{
			printf("erase item at %d from vector\n",ind);
			erase(vec,ind);
			break;
		}
		 }
   	  output(vec);
   }
   return 0;
}
二、代碼優(yōu)化和功能擴(kuò)充
#include#include#include//類型定義 
typedef struct Vector{
     int *data;
	 int size,length;	
}Vector;
//初始化創(chuàng)建一個(gè)存儲(chǔ)n個(gè)元素的順序表 
Vector *init(int n){
	Vector *vec=(Vector *)malloc(sizeof(Vector));
	vec->data=(int *)malloc(sizeof(int)*n);
	vec->size=n;
	vec->length=0;//代表順序表沒有儲(chǔ)存任何元素 
	return vec; 
}
//擴(kuò)容操作 
int expand(Vector *vec){
	int new_size=vec->size*2;
	//重新分配空間   
	//realloc重新分配后會(huì)銷毀原來空間 ,返回重新申請空間的首地址 
	int *p=(int *)realloc(vec->data,sizeof(int)*vec->size);
	//先判斷分配的地址是否為空,若為空代表分配空間失敗,此時(shí)不能將該地址賦值給vec->data,否則會(huì)丟失原地址,造成內(nèi)存泄漏 
	if(p==NULL) return 0;
	vec->size=new_size;
	vec->data=p;
	return 1;
}
//順序表的插入操作
int insert(Vector *vec,int ind,int val){
	//去除非法性操作 
	if(vec==NULL) return 0;
	//如果表滿后嘗試對表進(jìn)行擴(kuò)容,擴(kuò)容失敗才對操作進(jìn)行非法性排除 
	if(vec->length==vec->size){
		if(!expand(vec))  return 0;
		printf("expand vector size to %d success\n",vec->size); 
	} 
	if(ind<0||ind>vec->length) return 0;
	//插入操作 
	for(int i=vec->length;i>ind;i--){
		vec->data[i]=vec->data[i-1];
	} 
	vec->data[ind]=val;
	vec->length+=1;
	return 1;
} 
//順序表的刪除操作
int erase(Vector *vec,int ind){
	//去除非法性操作
	if(vec==NULL) return 0;
	if(vec->length==0) return 0;
	if(ind<0||ind>=vec->length) return 0;
	//刪除操作‘
	for(int i=ind+1;ilength;i++){
		vec->data[i-1]=vec->data[i];
	} 
	vec->length-=1;
	return 1;
}
//順序表銷毀
void clear(Vector *vec){
	if(vec==NULL) return ;//順序表為空直接返回
	free(vec->data);
	free(vec);
	return ; 
} 
//輸出順序表
void output(Vector *vec){
	printf("Vector(%d)=[",vec->length);
	for(int i=0;ilength;i++){
		if(i!=0) printf(", ");   //輸出兩個(gè)及以上元素用“,”隔開 
		printf("%d",vec->data[i]); 
	}
	printf("]\n");
	return ;
} 
int main()
{  srand(time(0));
   #define MAX_OP 20
   Vector *vec=init(1);
   int op,ind,val;
   //隨機(jī)產(chǎn)生20個(gè)元素 
   for(int i=0;ilength+1);
   	  val=rand()%100;
   	  switch(op){
   	  	//op為0,2,3執(zhí)行插入操作,75%概率插入 
		case 3:
		case 2: 
		case 0:{ 
   	  	        printf("insert %d at %d to vector\n",val,ind);
   	  	        insert(vec,ind,val);
				break;
			 }
   	  	//op為1執(zhí)行刪除操作 ,25%概率刪除 
		case 1:{
			printf("erase item at %d from vector\n",ind);
			erase(vec,ind);
			break;
		}
		 }
   	  output(vec);
   }
   return 0;
}

三、realloc相關(guān)知識(shí)?

realloc首先會(huì)在原有的數(shù)組首地址向后尋找申請空間,此時(shí)返回的還是原有數(shù)組的首地址;如果在原有首地址后找不到所需大小的空間,realloc則會(huì)調(diào)用malloc,重新申請空間,而且把原有空間中的數(shù)據(jù)拷貝到新空間中,然后釋放原有空間,最后返回新申請空間的首地址;如果找不到所需大小的空間,realloc不會(huì)釋放原空間,而且會(huì)返回一個(gè)空地址,代表重新分配空間失效。

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

網(wǎng)站題目:算法與數(shù)據(jù)結(jié)構(gòu)---順序表-創(chuàng)新互聯(lián)
文章源于:http://muchs.cn/article42/egshc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、云服務(wù)器、服務(wù)器托管、軟件開發(fā)、網(wǎng)站設(shè)計(jì)公司網(wǎng)站收錄

廣告

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

綿陽服務(wù)器托管