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

數(shù)據(jù)結(jié)構(gòu)(一):順序表詳解

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

在正式介紹順序表之前,我們有必要先了解一個(gè)名詞:線性表。

線性表:

線性表是,具有n個(gè)相同特性的數(shù)據(jù)元素的有限序列。常見的線性表:順序表、鏈表、棧、隊(duì)列、數(shù)組、字符串...

線性表在邏輯上是線性結(jié)構(gòu),但在物理結(jié)構(gòu)上并不一定是連續(xù)的。

數(shù)據(jù)結(jié)構(gòu)(一):順序表詳解,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu)


1. 順序表概念

順序表是用一段物理地址連續(xù)的儲存單元、依次存儲數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲。

數(shù)據(jù)結(jié)構(gòu)(一):順序表詳解,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu)

2. 順序表定義

typedef int SLDataType;// 順序表數(shù)據(jù)類型

typedef struct SeqList
{
	SLDataType* arr; // 指向動態(tài)開辟的數(shù)組
	int size;        // 有效數(shù)據(jù)個(gè)數(shù)
	int capacity;    // 容量
}SL;

3. 順序表的初始化

順序表的初始化,是使用 動態(tài)內(nèi)存管理 開辟空間構(gòu)造一個(gè)空的順序表

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#define DefaultCapacity 4 // 默認(rèn)初始化空間大小

void SLInit(SL* ps)
{
	assert(ps);

	SLDataType* tmp = (SLDataType*)malloc(sizeof(SLDataType) * DefaultCapacity);
	if (tmp == NULL)
	{
		perror("malloc");
		exit(-1);
	}
	ps->arr = tmp;
	ps->capacity = DefaultCapacity;
	ps->size = 0;
}

4. 在pos位置插入元素

數(shù)據(jù)結(jié)構(gòu)(一):順序表詳解,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu)

在pos位置插入數(shù)據(jù)之前,要檢查動態(tài)順序表的容量是否足夠 ,

不夠則利用 realloc函數(shù) 開辟一塊更大的空間給順序表。

檢查容量/擴(kuò)容:
void SLCapacityCheck(SL* ps)
{
	assert(ps);

	if (ps->size == ps->capacity)
	{
		SLDataType* tmp = (SLDataType*)realloc(ps->arr, ps->capacity * 2 * sizeof(SLDataType));
		if (tmp == NULL)
		{
			perror("realloc");
			exit(-1);
		}
		ps->capacity *= 2;
		ps->arr = tmp;
	}
}
插入:
void SLInsert(SL* ps, int pos, SLDataType x)
{
	assert(ps);

	SLCapacityCheck(ps);

	for (int i = ps->size - 1; i >= pos; i--)
	{
		ps->arr[i + 1] = ps->arr[i];
	}
	ps->arr[pos] = x;
    ps->size++;
}

5. 刪除pos位置元素

數(shù)據(jù)結(jié)構(gòu)(一):順序表詳解,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu)

void SLErase(SL* ps, int pos)
{
	assert(ps);

	for (int i = pos + 1; i < ps->size; i++)
	{
		ps->arr[i - 1] = ps->arr[i];
	}
	ps->size--;
}

6. 順序表查找(按值查找)

int SLFind(SL* ps, SLDataType x)
{
	assert(ps);

	for (int i = 0; i < ps->size; i++)
	{
		if (ps->arr[i] == x)
			return i;
	}
	// 找不到所查找的元素
	return -1;
}

在主函數(shù)中使用 SLFind函數(shù) 時(shí),應(yīng)檢驗(yàn) “返回值” 是否為非 -1,再使用

7. 順序表的打印

void SLPrint(SL* ps)
{
	assert(ps);

	for (int i = 0; i < ps->size; i++)
	{
		printf("%d ", ps->arr[i]);
	}
	printf("\n");
}

8. 順序表銷毀

void SLDestroy(SL* ps)
{
	assert(ps);

	free(ps->arr);
	ps->capacity = 0;
	ps->size = 0;
}

銷毀 arr 所指向的空間,將空間還給操作系統(tǒng)。文章來源地址http://www.zghlxwxcb.cn/news/detail-643146.html

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(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)初階】順序表

    線性表(linear list) 是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實(shí)際中廣泛使 用的數(shù)據(jù)結(jié)構(gòu),常見的線性表:順序表、鏈表、棧、隊(duì)列、字符串… 線性表在邏輯上是線性結(jié)構(gòu),也就說是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的,線性表在物理上

    2024年02月02日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)(初階)第二節(jié):順序表

    數(shù)據(jù)結(jié)構(gòu)(初階)第二節(jié):順序表

    數(shù)據(jù)結(jié)構(gòu)(初階)第一節(jié):數(shù)據(jù)結(jié)構(gòu)概論-CSDN博客 從本文正式進(jìn)入對數(shù)據(jù)結(jié)構(gòu)的講解,開始前友友們要有C語言的基礎(chǔ),熟練掌握 動態(tài)內(nèi)存管理 、 結(jié)構(gòu)體 、 指針 等章節(jié),方便后續(xù)的學(xué)習(xí)。 順序表(Sequence List) 順序表的分類 靜態(tài)順序表 動態(tài)順序表 順序表的功能 初始化 擴(kuò)

    2024年04月12日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)初階--二叉樹的順序結(jié)構(gòu)之堆

    數(shù)據(jù)結(jié)構(gòu)初階--二叉樹的順序結(jié)構(gòu)之堆

    目錄 一.堆的概念及結(jié)構(gòu) 1.1.堆的概念 1.2.堆的存儲結(jié)構(gòu) 二.堆的功能實(shí)現(xiàn) 2.1.堆的定義 2.2.堆的初始化 2.3.堆的銷毀 2.4.堆的打印 2.5.堆的插入 向上調(diào)整算法 堆的插入 2.6.堆的刪除 向下調(diào)整算法 堆的刪除 2.7.堆的取堆頂元素 2.8.堆的判空 2.9.堆的求堆的大小 三.堆的創(chuàng)建 3.1.向上調(diào)

    2024年02月14日
    瀏覽(27)
  • 初階數(shù)據(jù)結(jié)構(gòu)之---二叉樹的順序結(jié)構(gòu)-堆

    初階數(shù)據(jù)結(jié)構(gòu)之---二叉樹的順序結(jié)構(gòu)-堆

    今天要講的堆,不是操作系統(tǒng)虛擬進(jìn)程地址空間中(malloc,realloc等開空間的位置)的那個(gè)堆,而是數(shù)據(jù)結(jié)構(gòu)中的堆,它們雖然名字相同,卻是截然不同的兩個(gè)概念。堆的底層其實(shí)是 完全二叉樹 ,如果你問我,完全二叉樹是什么。好吧,那我先從樹開始講起,開始我們今天的

    2024年03月14日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)(初階):順序表實(shí)戰(zhàn)通訊錄

    數(shù)據(jù)結(jié)構(gòu)(初階)第一節(jié):數(shù)據(jù)結(jié)構(gòu)概論-CSDN博客 數(shù)據(jù)結(jié)構(gòu)(初階)第二節(jié):順序表-CSDN博客 ????????本文將以C語言和順序表實(shí)現(xiàn)通訊錄基礎(chǔ)管理,實(shí)現(xiàn)功能包括增、刪、改、查等,在實(shí)現(xiàn)相關(guān)功能時(shí)需要用到在第二節(jié)中順序表的相關(guān)內(nèi)容,需要友友們掌握順序表的相關(guān)

    2024年04月16日
    瀏覽(23)
  • 初階數(shù)據(jù)結(jié)構(gòu):順序表相關(guān)題目練習(xí)

    初階數(shù)據(jù)結(jié)構(gòu):順序表相關(guān)題目練習(xí)

    在對順序表這一數(shù)據(jù)結(jié)構(gòu)進(jìn)行了學(xué)習(xí)與自實(shí)現(xiàn)后,我明白了順序表的是使用了 物理地址上連續(xù)的數(shù)組模型 實(shí)現(xiàn)的,而 插入刪除 的操作都會涉及到其中 數(shù)據(jù)的挪動與邊界問題 。接下來,就結(jié)合算法時(shí)空間復(fù)雜的要求來對這一相關(guān)問題通過幾道題目進(jìn)行鞏固練習(xí)。 題目要求:

    2024年01月20日
    瀏覽(17)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表

    【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表

    ========================================================================= 相關(guān)代碼gitee自取 : C語言學(xué)習(xí)日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 【數(shù)據(jù)結(jié)構(gòu)初階】一. 復(fù)雜度講解_高高的胖子的博客-CSDN博客 ?=======================================

    2024年02月09日
    瀏覽(45)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】順序表和鏈表(1)

    【數(shù)據(jù)結(jié)構(gòu)初階】順序表和鏈表(1)

    線性表(linear list) 是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實(shí)際中廣泛使 用的數(shù)據(jù)結(jié)構(gòu),常見的線性表:順序表、鏈表、棧、隊(duì)列、字符串… 線性表在邏輯上是線性結(jié)構(gòu),也就說是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的,線性表在物理上

    2024年02月08日
    瀏覽(1598)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表(C語言實(shí)現(xiàn)順序表)

    【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表(C語言實(shí)現(xiàn)順序表)

    ========================================================================= 相關(guān)代碼gitee自取 : C語言學(xué)習(xí)日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 【數(shù)據(jù)結(jié)構(gòu)初階】一. 復(fù)雜度講解_高高的胖子的博客-CSDN博客 ?=======================================

    2024年02月08日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)初階之順序表(C語言實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)初階之順序表(C語言實(shí)現(xiàn))

    順序表是數(shù)據(jù)結(jié)構(gòu)里面很基礎(chǔ)的一類,它是線性表的一種,其它線性表還有鏈表、棧和隊(duì)列等,今天來和博主一起學(xué)習(xí)關(guān)于順序表的知識吧。 順序表,它分為兩類: 動態(tài)順序表 和 靜態(tài)順序表 ,這兩個(gè)表的區(qū)別就是 前者的空間不固定 ,是 支持?jǐn)U容 的,后者的 空間是固定

    2024年02月03日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包