前言數(shù)據(jù)結(jié)構(gòu)=結(jié)構(gòu)定義+結(jié)構(gòu)操作?本文章為觀看如下視頻所寫:
創(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
針對此線性表
1、size代表當(dāng)前線性表的總大小,最多存儲(chǔ)多少個(gè)元素。
2、length代表當(dāng)前線性表一共存儲(chǔ)的元素個(gè)數(shù)。
3、data_type代表當(dāng)前線性表存儲(chǔ)的每個(gè)元素的數(shù)據(jù)類型。
#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)知識?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級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站題目:算法與數(shù)據(jù)結(jié)構(gòu)---順序表-創(chuàng)新互聯(lián)
文章源于:http://jinyejixie.com/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)
猜你還喜歡下面的內(nèi)容