国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)與算法 --順序表的創(chuàng)建

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法 --順序表的創(chuàng)建。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.

順序表(Sequence List)是一種線性表的實(shí)現(xiàn)方式,通過(guò)連續(xù)的內(nèi)存空間存儲(chǔ)元素,按照順序排列。

順序表的特點(diǎn)包括:

  • 元素在內(nèi)存中的存儲(chǔ)是連續(xù)的,通過(guò)數(shù)組實(shí)現(xiàn)。
  • 元素之間的邏輯順序與物理順序一致。
  • 可以根據(jù)元素的索引直接訪問(wèn)和修改元素。
  • 需要預(yù)先分配足夠的內(nèi)存空間,容量固定。

順序表常見(jiàn)的操作包括:

  • 創(chuàng)建:通過(guò)動(dòng)態(tài)內(nèi)存分配,創(chuàng)建一個(gè)具有指定容量的順序表。
  • 銷毀:釋放順序表占用的內(nèi)存空間。
  • 清空:將順序表中的元素清空,使其為空表。
  • 插入:在指定位置插入一個(gè)元素,后面的元素依次后移。
  • 刪除:刪除指定位置的元素,后面的元素依次前移。
  • 訪問(wèn):根據(jù)索引訪問(wèn)指定位置的元素。
  • 查詢:根據(jù)元素的值查找元素在順序表中的位置。
  • 修改:根據(jù)索引修改指定位置的元素的值。
  • 排序:對(duì)順序表中的元素進(jìn)行排序,常用的算法有冒泡排序、插入排序、快速排序等。
  • 遍歷:按照順序依次訪問(wèn)順序表中的元素。

優(yōu)點(diǎn):

隨機(jī)訪問(wèn)效率高,可以直接通過(guò)索引定位元素,不需要遍歷,不容易產(chǎn)生內(nèi)存碎片

缺點(diǎn):

插入和刪除操作需要移動(dòng)大量元素,效率較低,并且容量固定,無(wú)法動(dòng)態(tài)擴(kuò)容。

另外注意的是,在使用順序表時(shí),需要進(jìn)行邊界檢查,避免越界訪問(wèn)。此外,插入和刪除元素時(shí)需要注意維護(hù)順序表的邏輯和物理順序一致性。

代碼實(shí)現(xiàn)

設(shè)計(jì)順序表結(jié)構(gòu)

//	設(shè)計(jì)順序表結(jié)構(gòu)
typedef struct Array
{
	TYPE* ptr;		//	存儲(chǔ)元素的內(nèi)存首地址
	size_t cal;		//	表的容量
	size_t cnt;		//	元素的數(shù)量
}Array;

創(chuàng)建

//	創(chuàng)建
Array* create_array(size_t cal)
{
	Array* arr = malloc(sizeof(Array));   //	給順序表結(jié)構(gòu)分配內(nèi)存 

	arr->ptr = malloc(sizeof(TYPE)*cal);    //	給數(shù)據(jù)元素分配內(nèi)存
	
	arr->cal = cal;        //	給數(shù)據(jù)元素分配內(nèi)存

	arr->cnt = 0;        //	初始化元素的數(shù)量

	return arr;
}

銷毀


//	銷毀
void destroy_array(Array* arr)
{
	free(arr->ptr);
	free(arr);
}

清空


//	銷毀
void destroy_array(Array* arr)
{
	free(arr->ptr);
	free(arr);
}

插入

//	插入
bool insert_array(Array* arr,size_t index,TYPE data)
{
	//	判斷表是否滿
	if(arr->cnt >= arr->cal)	return false;
	//	判斷下標(biāo)是否能保持元素的連續(xù)性
	if(index > arr->cnt) return false;


	//	數(shù)據(jù)向后移動(dòng)
	for(int i=arr->cnt; i>index; i--)
	{
		arr->ptr[i] = arr->ptr[i-1];	
	}

	//	插入數(shù)據(jù)
	arr->ptr[index] = data;
	arr->cnt++;
	return true;
}

刪除

//	刪除
bool delete_array(Array* arr,size_t index)
{
	if(index >= arr->cnt) return false;   //判斷表是否滿
	
	for(int i=index; i<arr->cnt-1; i++)
	{
		arr->ptr[i] = arr->ptr[i+1];
	}
	
	arr->cnt--;
	return true;
}

訪問(wèn)

//	訪問(wèn)
bool access_array(Array* arr,size_t index,TYPE* data)
{
	if(index >= arr->cnt) return false;
	*data = arr->ptr[index];
	return true;
}

查詢

//	查詢
int query_array(Array* arr,TYPE data)
{
	for(int i=0; i<arr->cnt; i++)
		if(arr->ptr[i] == data) return i;
	return -1;
}

修改

//	修改
bool modify_array(Array* arr,size_t index,TYPE data)
{
	if(index >= arr->cnt) return false;
	arr->ptr[index] = data;
	return true;
}

排序

//	排序
void sort_array(Array* arr)
{
	for(int i=0; i<arr->cnt-1; i++)
	{
		for(int j=i+1; j<arr->cnt; j++)	
		{
			if(arr->ptr[j] < arr->ptr[i])
			{
				TYPE temp = arr->ptr[j];
				arr->ptr[j] = arr->ptr[i];
				arr->ptr[i] = temp;
			}
		}
	}
}

遍歷

//	遍歷
void show_array(Array* arr)
{
	for(int i=0; i<arr->cnt; i++)
	{
		printf(PH,arr->ptr[i]);	
	}
	printf("\n");
}

完整代碼文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-843469.html

  1. #include <stdio.h>
    #include <stdbool.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define TYPE int
    #define PH "%d "
    
    //	設(shè)計(jì)順序表結(jié)構(gòu)
    typedef struct Array
    {
    	TYPE* ptr;		//	存儲(chǔ)元素的內(nèi)存首地址
    	size_t cal;		//	表的容量
    	size_t cnt;		//	元素的數(shù)量
    }Array;
    
    //	創(chuàng)建
    Array* create_array(size_t cal)
    {
    	//	給順序表結(jié)構(gòu)分配內(nèi)存
    	Array* arr = malloc(sizeof(Array));
    	//	給數(shù)據(jù)元素分配內(nèi)存
    	arr->ptr = malloc(sizeof(TYPE)*cal);
    	//	記錄表的容量
    	arr->cal = cal;
    	//	初始化元素的數(shù)量
    	arr->cnt = 0;
    
    	return arr;
    }
    
    //	銷毀
    void destroy_array(Array* arr)
    {
    	free(arr->ptr);
    	free(arr);
    }
    //	清空
    void clear_array(Array* arr)
    {
    	arr->cnt = 0;	
    }
    
    //	插入
    bool insert_array(Array* arr,size_t index,TYPE data)
    {
    	//	判斷表是否滿
    	if(arr->cnt >= arr->cal)	return false;
    	//	判斷下標(biāo)是否能保持元素的連續(xù)性
    	if(index > arr->cnt) return false;
    
    	//	數(shù)據(jù)向后移動(dòng)
    	for(int i=arr->cnt; i>index; i--)
    	{
    		arr->ptr[i] = arr->ptr[i-1];	
    	}
    
    
    	//	插入數(shù)據(jù)
    	arr->ptr[index] = data;
    	arr->cnt++;
    	return true;
    }
    
    //	刪除
    bool delete_array(Array* arr,size_t index)
    {
    	if(index >= arr->cnt) return false;
    	
    	for(int i=index; i<arr->cnt-1; i++)
    	{
    		arr->ptr[i] = arr->ptr[i+1];
    	}
    	
    	arr->cnt--;
    	return true;
    }
    
    //	訪問(wèn)
    bool access_array(Array* arr,size_t index,TYPE* data)
    {
    	if(index >= arr->cnt) return false;
    	*data = arr->ptr[index];
    	return true;
    }
    
    //	查詢
    int query_array(Array* arr,TYPE data)
    {
    	for(int i=0; i<arr->cnt; i++)
    		if(arr->ptr[i] == data) return i;
    	return -1;
    }
    //	修改
    bool modify_array(Array* arr,size_t index,TYPE data)
    {
    	if(index >= arr->cnt) return false;
    	arr->ptr[index] = data;
    	return true;
    }
    
    //	排序
    void sort_array(Array* arr)
    {
    	for(int i=0; i<arr->cnt-1; i++)
    	{
    		for(int j=i+1; j<arr->cnt; j++)	
    		{
    			if(arr->ptr[j] < arr->ptr[i])
    			{
    				TYPE temp = arr->ptr[j];
    				arr->ptr[j] = arr->ptr[i];
    				arr->ptr[i] = temp;
    			}
    		}
    	}
    }
    
    //	遍歷
    void show_array(Array* arr)
    {
    	for(int i=0; i<arr->cnt; i++)
    	{
    		printf(PH,arr->ptr[i]);	
    	}
    	printf("\n");
    }
    
    int main(int argc,const char* argv[])
    {
    	Array* arr = create_array(10);	
    
    	for(int i=0; i<5; i++)
    	{
    		insert_array(arr,0,i+1);	
    	}
    
    	insert_array(arr,1,8);	
    	delete_array(arr,5);
    	show_array(arr);
    
    	int num = 0;
    	if(access_array(arr,5,&num))
    		printf("num=%d\n",num);
    	else
    		printf("index error\n");
    	
    	printf("index=%d\n",query_array(arr,80));
    
    	sort_array(arr);
    	clear_array(arr);
    	show_array(arr);
    	destroy_array(arr);
    
    }
    

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)與算法 --順序表的創(chuàng)建的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)--順序表的查找

    數(shù)據(jù)結(jié)構(gòu)--順序表的查找

    目標(biāo): GetElem(L,i):按位查找操作。獲取表L中第i個(gè)位置的元素的值。 代碼實(shí)現(xiàn) 時(shí)間復(fù)雜度 O(1) 由于順序表的各個(gè)數(shù)據(jù)元素在內(nèi)存中連續(xù)存放,因此可以根據(jù)起始地址和數(shù)據(jù)元素大小立即找到第i個(gè)元素——“隨機(jī)存取”特性 目標(biāo): LocateElem(Le):按值查找操作。在表L中查找具有給

    2024年02月11日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)】--順序表的實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】--順序表的實(shí)現(xiàn)

    什么是順序表?順序表(SeqList)是線性表中的一類。而線性表是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。線性表是一種在實(shí)際中廣泛使用的數(shù)據(jù)結(jié)構(gòu),常見(jiàn)的線性表:順序表、鏈表、字符串、棧、隊(duì)列... 注意:線性表在邏輯上是線性結(jié)構(gòu),也就是說(shuō)是一條連續(xù)的直線。但在

    2024年04月17日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序表的學(xué)習(xí)

    【數(shù)據(jù)結(jié)構(gòu)】順序表的學(xué)習(xí)

    前言:在之前我們學(xué)習(xí)了C語(yǔ)言的各種各樣的語(yǔ)法,因此我們今天開(kāi)始學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)這一個(gè)模塊,因此我們就從第一個(gè)部分來(lái)開(kāi)始學(xué)習(xí)\\\" 順序表 \\\"。 ?? 博主CSDN主頁(yè):衛(wèi)衛(wèi)衛(wèi)的個(gè)人主頁(yè) ?? ?? 專欄分類:數(shù)據(jù)結(jié)構(gòu) ?? ??代碼倉(cāng)庫(kù):衛(wèi)衛(wèi)周大胖的學(xué)習(xí)日記?? ??關(guān)注博主和博主一起學(xué)

    2024年02月05日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu):順序表的奧秘

    數(shù)據(jù)結(jié)構(gòu):順序表的奧秘

    ??個(gè)人名片: ??作者簡(jiǎn)介: 一名樂(lè)于分享在學(xué)習(xí)道路上收獲的大二在校生 ????個(gè)人主頁(yè)??:GOTXX ??個(gè)人WeChat:ILXOXVJE ??本文由GOTXX原創(chuàng),首發(fā)CSDN?????? ??系列專欄:零基礎(chǔ)學(xué)習(xí)C語(yǔ)言----- 數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)之路 ??每日一句:如果沒(méi)有特別幸運(yùn),那就請(qǐng)?zhí)貏e努力!??

    2024年03月10日
    瀏覽(17)
  • 頭歌(C語(yǔ)言)-數(shù)據(jù)結(jié)構(gòu)與算法-隊(duì)列-第1關(guān):實(shí)現(xiàn)一個(gè)順序存儲(chǔ)的隊(duì)列

    頭歌(C語(yǔ)言)-數(shù)據(jù)結(jié)構(gòu)與算法-隊(duì)列-第1關(guān):實(shí)現(xiàn)一個(gè)順序存儲(chǔ)的隊(duì)列

    任務(wù)描述 相關(guān)知識(shí) 順序存儲(chǔ)的隊(duì)列 順序隊(duì)列的主要操作 編程要求 測(cè)試說(shuō)明 任務(wù)描述 本關(guān)任務(wù):實(shí)現(xiàn) step1/SeqQueue.cpp 中的 SQ_IsEmpty 、 SQ_IsFull 、 SQ_Length 、 SQ_In 和 SQ_Out 五個(gè)操作函數(shù),以實(shí)現(xiàn)判斷隊(duì)列是否為空、是否為滿、求隊(duì)列長(zhǎng)度、隊(duì)列元素入隊(duì)和出隊(duì)等功能。 相關(guān)知

    2024年02月06日
    瀏覽(162)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序表的實(shí)現(xiàn)——靜態(tài)分配

    【數(shù)據(jù)結(jié)構(gòu)】順序表的實(shí)現(xiàn)——靜態(tài)分配

    ??個(gè)人主頁(yè):豌豆射手^ ??歡迎 ??點(diǎn)贊?評(píng)論?收藏 ??收錄專欄:數(shù)據(jù)結(jié)構(gòu) ??希望本文對(duì)您有所裨益,如有不足之處,歡迎在評(píng)論區(qū)提出指正,讓我們共同學(xué)習(xí)、交流進(jìn)步! 在數(shù)據(jù)結(jié)構(gòu)的領(lǐng)域中,順序表是一種基礎(chǔ)且重要的線性表實(shí)現(xiàn)方式。它采用一段地址連續(xù)的存儲(chǔ)

    2024年04月26日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序表的定義和操作

    【數(shù)據(jù)結(jié)構(gòu)】順序表的定義和操作

    目錄 1.初始化 2.插入 3.刪除 4.查找 5.修改 6.長(zhǎng)度 7.遍歷 8.完整代碼 ??嗨!我是Filotimo__??。很高興與大家相識(shí),希望我的博客能對(duì)你有所幫助。 ??本文由Filotimo__??原創(chuàng),首發(fā)于CSDN??。 ??如需轉(zhuǎn)載,請(qǐng)事先與我聯(lián)系以獲得授權(quán)??。 ??歡迎大家給我點(diǎn)贊??、收藏??

    2024年02月03日
    瀏覽(14)
  • 數(shù)據(jù)結(jié)構(gòu)(六)——線性表的順序?qū)崿F(xiàn)

    數(shù)據(jù)結(jié)構(gòu)(六)——線性表的順序?qū)崿F(xiàn)

    ??個(gè)人主頁(yè):塵覺(jué)主頁(yè) ??個(gè)人簡(jiǎn)介:大家好,我是塵覺(jué),希望我的文章可以幫助到大家,您的滿意是我的動(dòng)力?? 在csdn獲獎(jiǎng)榮譽(yù): ??csdn城市之星2名 ???? ???? ???? ???? ???? ???? ???? ???? ??csdn2023年后端賽道第第七 ???? ????

    2024年01月25日
    瀏覽(30)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序表的定義和運(yùn)算

    【數(shù)據(jù)結(jié)構(gòu)】順序表的定義和運(yùn)算

    目錄 1.初始化 2.插入 3.刪除 4.查找 5.修改 6.長(zhǎng)度 7.遍歷 8.完整代碼 ??嗨!我是Filotimo__??。很高興與大家相識(shí),希望我的博客能對(duì)你有所幫助。 ??本文由Filotimo__??原創(chuàng),首發(fā)于CSDN??。 ??如需轉(zhuǎn)載,請(qǐng)事先與我聯(lián)系以獲得授權(quán)??。 ??歡迎大家給我點(diǎn)贊??、收藏??

    2024年02月05日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包