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

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

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

=========================================================================

相關(guān)代碼gitee自取

C語(yǔ)言學(xué)習(xí)日記: 加油努力 (gitee.com)

?=========================================================================

接上期

【數(shù)據(jù)結(jié)構(gòu)初階】一. 復(fù)雜度講解_高高的胖子的博客-CSDN博客

?=========================================================================

?? ? ? ? ? ? ? ? ? ? ?

1 . 線性表

? ? ? ? ? ? ? ?

線性表linear list)是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。

線性表是一種在實(shí)際中廣泛使用的數(shù)據(jù)結(jié)構(gòu)

常見(jiàn)線性表順序表、鏈表、隊(duì)列、字符串...

順序表示例:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ??

? ? ? ? ? ? ??

線性表邏輯上線性結(jié)構(gòu),也就說(shuō)是連續(xù)的一條直線。

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

線性表物理上存儲(chǔ)時(shí),通常以數(shù)組鏈?zhǔn)浇Y(jié)構(gòu)形式存儲(chǔ)。

鏈表示例:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

? ? ? ? ? ? ?

2 . 順序表

順序表概念及結(jié)構(gòu):

? ? ? ? ? ? ? ?

順序表一段物理地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素線性結(jié)構(gòu)

一般情況下采用數(shù)組存儲(chǔ),

數(shù)組上完成數(shù)據(jù)的增刪查改,

順序表一般可以分為 靜態(tài)順序表動(dòng)態(tài)順序表

? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ?

靜態(tài)順序表:使用定長(zhǎng)數(shù)組存儲(chǔ)元素

? ? ? ? ? ? ? ??

因?yàn)?span style="color:#1c7331;">靜態(tài)順序表使用定長(zhǎng)數(shù)組存儲(chǔ)元素,

對(duì)空間的運(yùn)用不夠靈活,可能造成空間浪費(fèi)或不夠的問(wèn)題
所以在實(shí)際情況下,靜態(tài)順序表并不常用不夠?qū)嵱?/span>)

示例:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ??

動(dòng)態(tài)順序表:使用動(dòng)態(tài)開(kāi)辟的數(shù)組存儲(chǔ)元素

? ? ? ? ? ? ?

靜態(tài)順序表適用于確定知道需要存多少數(shù)據(jù)的場(chǎng)景。

靜態(tài)順序表定長(zhǎng)數(shù)組導(dǎo)致N定大了空間開(kāi)多了浪費(fèi),開(kāi)少了不夠用。

所以現(xiàn)實(shí)中基本都是使用動(dòng)態(tài)順序表,根據(jù)需要?jiǎng)討B(tài)地分配空間大小

示例:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

? ? ? ? ? ? ?

3 .接口實(shí)現(xiàn)(實(shí)現(xiàn)動(dòng)態(tài)順序表):

(詳細(xì)解釋在注釋?zhuān)a分文件放最后)

? ? ? ? ? ? ? ??

數(shù)據(jù)結(jié)構(gòu)可以管理數(shù)據(jù)

通過(guò) 增刪改查 等操作就可以實(shí)現(xiàn)管理數(shù)據(jù)

? ? ? ? ? ? ??

現(xiàn)在有了動(dòng)態(tài)順序表后,

就可以對(duì)其進(jìn)行增刪改查等操作來(lái)實(shí)現(xiàn)動(dòng)態(tài)順序表

? ? ? ? ? ? ? ? ? ? ??文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-703981.html

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

SLInit函數(shù) -- 順序表初始化

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

SLDestroy函數(shù) -- 順序表銷(xiāo)毀

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

SLPrint函數(shù) -- 測(cè)試函數(shù)

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

SLPushBack函數(shù) -- 將值插入順序表尾部(尾插)

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

尾插函數(shù)SLPushBack測(cè)試:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

上面尾插需要考慮空間不夠進(jìn)行擴(kuò)容,

后面的頭插同樣也需要考慮

所以可以在順序表實(shí)現(xiàn)文件設(shè)置一個(gè)內(nèi)部函數(shù)SLCheckCapacity,

在需要的時(shí)候直接調(diào)用該函數(shù)進(jìn)行擴(kuò)容操作

↓↓↓↓↓

? ? ? ? ? ? ? ? ?

SLCheckCapacity內(nèi)部函數(shù) -- 進(jìn)行擴(kuò)容操作

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

SLPopBack函數(shù) -- 將值從順序表尾部刪除(尾刪)

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

尾刪函數(shù)SLPopBack測(cè)試:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

SLPushFront函數(shù) -- 將值插入順序表頭部(頭插)

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

頭插函數(shù)SLPushFront測(cè)試:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

SLPopFront函數(shù) -- 將值從順序表頭部刪除(頭刪)

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

頭刪函數(shù)SLPopFront測(cè)試:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

SLInsert函數(shù) -- 在指定位置(pos)插入想要的值(x)

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

指定添加函數(shù)SLInsert測(cè)試:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ?

這里寫(xiě)了指定位置插入SLInsert函數(shù),

可以想到其實(shí) 頭插 尾插 也是可以用 SLInsert函數(shù) 實(shí)現(xiàn)的

所以可以在頭插和尾插函數(shù)中復(fù)用 SLInsert函數(shù) 來(lái)減少代碼量

↓↓↓↓↓

? ? ? ? ? ? ? ? ??

復(fù)用SLInsert函數(shù) -- 改寫(xiě)頭插函數(shù)SLPushFront

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ?

復(fù)用SLInsert函數(shù) -- 改寫(xiě)尾插函數(shù)SLPushBack

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

上面SLInsert函數(shù)涉及了插入位置pos下標(biāo),

有時(shí)在增刪改查操作時(shí),需要知道有效元素中某個(gè)元素的下標(biāo)再進(jìn)行操作,

所以我們可以定義一個(gè)函數(shù)SLFind來(lái)查找該元素的下標(biāo)

↓↓↓↓↓

? ? ? ? ? ? ? ? ?

SLFind函數(shù) -- 查找x這個(gè)值在順序表中的下標(biāo)是多少

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

查找函數(shù)SLFind測(cè)試:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

SLErase函數(shù) --?刪除指定位置(pos)的值

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

刪除指定位置函數(shù)SLErase測(cè)試:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ?

完成指定刪除SLErase函數(shù),

頭刪 尾刪 函數(shù)中也可以進(jìn)行復(fù)用?SLErase函數(shù)?來(lái)減少代碼量

↓↓↓↓↓

? ? ? ? ? ? ? ? ??

復(fù)用SLErase函數(shù) -- 改寫(xiě)頭刪函數(shù)SLPopFront

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ?

復(fù)用SLErase函數(shù) -- 改寫(xiě)尾刪函數(shù)SLPopBack

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

SLModify函數(shù) --?把某個(gè)位置(pos)的值修改為某值(x)

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

修改函數(shù)SLModify測(cè)試:

【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表,CCC全是C,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

?? ? ? ? ?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

? ? ? ? ? ? ?

4 . 對(duì)應(yīng)代碼

SeqList.h -- 順序表頭文件

#pragma once

定義一個(gè)靜態(tài)順序表:使用定長(zhǎng)數(shù)組存儲(chǔ)元素
因?yàn)殪o態(tài)順序表使用定長(zhǎng)數(shù)組存儲(chǔ)元素,對(duì)空間的運(yùn)用不夠靈活
所以在實(shí)際情況下,靜態(tài)順序表并不常用(不夠?qū)嵱茫?//
//#define N 1000  //“表”的大小的值
//typedef int SLDataType;  //定義順序表中存儲(chǔ)的類(lèi)型,這里是int類(lèi)型
//
//struct SeqList
//{
//	SLDataType a[N]; //定義表的大小
//	int size; //記錄表中存儲(chǔ)了多少個(gè)有效數(shù)據(jù)
//};


//將需要的頭文件都包含在 SeqList.h 頭文件中
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>


//定義一個(gè)動(dòng)態(tài)順序表:使用動(dòng)態(tài)開(kāi)辟的數(shù)組存儲(chǔ)元素
typedef int SLDataType;  //定義順序表中存儲(chǔ)的類(lèi)型,這里是int類(lèi)型

typedef struct SeqList
{
	//定義一個(gè)順序表類(lèi)型的指針,指向動(dòng)態(tài)開(kāi)辟的數(shù)組
	SLDataType* a; 
	
	int size; //記錄表中存儲(chǔ)了多少個(gè)有效數(shù)據(jù)
	int capactity; //容量空間的大小
}SL;


//數(shù)據(jù)結(jié)構(gòu) --> 管理數(shù)據(jù) --> 增刪查改

//順序表初始化  --  頭文件中聲明
void SLInit(SL* ps); 

//順序表銷(xiāo)毀 --  頭文件中聲明
//內(nèi)存是動(dòng)態(tài)開(kāi)辟地,不銷(xiāo)毀的話可能會(huì)導(dǎo)致內(nèi)存泄漏)
void SLDestroy(SL* ps);

//寫(xiě)一個(gè)測(cè)試函數(shù)(聲明),方便檢查各步驟有沒(méi)有問(wèn)題:
void SLPrint(SL* ps);

//尾插(聲明) -- 將值插入順序表尾部:
void SLPushBack(SL* ps, SLDataType x);

//尾刪(聲明) -- 將值從順序表尾部刪除:
void SLPopBack(SL* ps);

//頭插(聲明) -- 將值插入順序表頭部:
void SLPushFront(SL* ps, SLDataType x);

//頭刪(聲明) -- 將值從順序表頭部刪除:
void SLPopFront(SL* ps);

//在指定位置(pos)插入想要的值(x)
void SLInsert(SL* ps, int pos, SLDataType x);

//查找x這個(gè)值在順序表中的下標(biāo)是多少:
int SLFind(SL* ps, SLDataType x); //返回找到的下標(biāo)

//刪除指定位置(pos)的值:
void SLErase(SL* ps, int pos);

//把某個(gè)位置(pos)的值修改為某值(x)
void SLModify(SL* ps, int pos, SLDataType x);

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

SeqList.c?-- 順序表實(shí)現(xiàn)文件

#define _CRT_SECURE_NO_WARNINGS 1

//包含我們寫(xiě)的 SeqList.h 頭文件
#include "SeqList.h"


//順序表初始化 -- 實(shí)現(xiàn)
void SLInit(SL* ps)
{
	//assert斷言,防止接收空指針:
	assert(ps);

	//初始化順序表類(lèi)型指針
	//初始化時(shí)要先開(kāi)辟一些動(dòng)態(tài)空間:
	//開(kāi)辟的空間為順序表類(lèi)型,大小為4個(gè)順序表類(lèi)型的大小
	ps->a = (SLDataType*)malloc(sizeof(SLDataType)*4); 
	
	//順序表作為一個(gè)獨(dú)立的程序,之后可能會(huì)應(yīng)用于其他程序,
	//所以要對(duì)開(kāi)辟的動(dòng)態(tài)空間進(jìn)行檢查:
	if (ps->a == NULL)
	{
		//可能開(kāi)辟的空間過(guò)大 或 前面開(kāi)辟太多空間不夠再開(kāi)辟
		perror("malloc failed");  //打印錯(cuò)誤

		//讓程序以異常的形式結(jié)束程序
		//和 return 不同,return后主函數(shù)還會(huì)繼續(xù)進(jìn)行
		exit(-1);
	}

	//將順序表中的有效數(shù)據(jù)初始化為0:
	ps->size = 0;

	//將已動(dòng)態(tài)開(kāi)辟的容量空間初始化為4:
	ps->capactity = 4;
}



//順序表銷(xiāo)毀 -- 實(shí)現(xiàn)
//內(nèi)存是動(dòng)態(tài)開(kāi)辟地,不銷(xiāo)毀的話可能會(huì)導(dǎo)致內(nèi)存泄漏)
void SLDestroy(SL* ps)
{
	//assert斷言,防止接收空指針:
	assert(ps);

	//釋放前面開(kāi)辟的動(dòng)態(tài)空間:
	free(ps->a);
	
	//將釋放的指針置為空指針:
	ps->a = NULL;

	//將已開(kāi)辟的動(dòng)態(tài)空間置為0,順序表有效數(shù)據(jù)也置為0
	ps->capactity = ps->size = 0;
}



//寫(xiě)一個(gè)測(cè)試函數(shù)(實(shí)現(xiàn)),方便檢查各步驟有沒(méi)有問(wèn)題:
void SLPrint(SL* ps)
{
	//assert斷言,防止接收空指針:
	assert(ps);

	//打印動(dòng)態(tài)順序表現(xiàn)有的有效數(shù)據(jù):
	for (int i = 0; i < ps->size; i++)
	{
		printf("%d ", ps->a[i]);
	}

	//打印完當(dāng)前動(dòng)態(tài)順序表有效數(shù)據(jù)后進(jìn)行換行:
	printf("\n");
}



//在順序表實(shí)現(xiàn)文件中設(shè)置一個(gè)內(nèi)部函數(shù)SLCheckCapacity,
//在需要的時(shí)候直接調(diào)用該函數(shù)進(jìn)行擴(kuò)容操作
void SLCheckCapacity(SL* ps)
{
	//assert斷言,防止接收空指針:
	assert(ps);

	//判斷開(kāi)辟的空間是否已滿(mǎn),滿(mǎn)了再開(kāi)辟:
	if (ps->size == ps->capactity)
		//順序表有效個(gè)數(shù) 等于 已開(kāi)辟容量空間
	{
		//使用 realloc函數(shù) 進(jìn)行擴(kuò)容,每次擴(kuò)容2倍:
		SLDataType* tmp = (SLDataType*)realloc(ps->a, ps->capactity * 2 * (sizeof(SLDataType)));
		// realloc 是把空間擴(kuò)容到第二個(gè)參數(shù)的大小,而不是直接把空間擴(kuò)容第二個(gè)參數(shù)的大小

		//同樣進(jìn)行檢驗(yàn):
		if (tmp == NULL)
		{
			//打印錯(cuò)誤:
			perror("realloc failed");
			//出現(xiàn)錯(cuò)誤直接終止程序:
			exit(-1);
		}

		//realloc函數(shù),有兩種擴(kuò)容情況:一種是原地?cái)U(kuò)容,另一種是異地?cái)U(kuò)容
		//原地?cái)U(kuò)容:擴(kuò)容時(shí)看原空間后的內(nèi)容有沒(méi)有分配給別人,如果沒(méi)有則把原空間后面的空間標(biāo)記出來(lái)進(jìn)行擴(kuò)容,返回原空間的地址
		//異地?cái)U(kuò)容:如果擴(kuò)容時(shí)原空間后面的內(nèi)容已被分配,則另找一個(gè)足夠原空間擴(kuò)容后的空間進(jìn)行存放,
		//		   原本的數(shù)據(jù)都搬到這個(gè)空間來(lái),原空間會(huì)被釋放,返回這個(gè)新空間的地址。
		//所以使用 realloc函數(shù) 擴(kuò)容后,不要對(duì)原空間指針進(jìn)行釋放,
		//如果realloc執(zhí)行后是原地?cái)U(kuò)容返回原空間指針,擴(kuò)容后后對(duì)原空間指針釋放就會(huì)出問(wèn)題


		//把擴(kuò)容返回的指針賦給原指針:
		ps->a = tmp;

		//將已動(dòng)態(tài)開(kāi)辟的容量空間置為原來(lái)的2倍:
		ps->capactity *= 2;
	}
}



//尾插(實(shí)現(xiàn)) -- 將值插入順序表尾部:
void SLPushBack(SL* ps, SLDataType x)
{
	//assert斷言,防止接收空指針:
	assert(ps);

	調(diào)用內(nèi)部函數(shù)進(jìn)行擴(kuò)容操作:
	//SLCheckCapacity(ps);

	空間容量足夠后將要插入尾部的值插入:
	//ps->a[ps->size] = x; 
	因?yàn)橄聵?biāo)從0開(kāi)始,所以size的值會(huì)等于現(xiàn)有元素下一位的下標(biāo)

	//ps->size++; //尾部插入元素后,更新順序表中有效數(shù)據(jù)個(gè)數(shù)

	//復(fù)用SLInsert函數(shù) -- 改寫(xiě)尾插函數(shù)SLPushBack
	SLInsert(ps, ps->size, x); //在size位置插入就相當(dāng)于尾插
}



//尾刪(實(shí)現(xiàn)) -- 將值從順序表尾部刪除:
void SLPopBack(SL* ps)
{
	//assert斷言,防止接收空指針:
	assert(ps);

	檢查一下:如果有效數(shù)據(jù)size等于0,則不能繼續(xù)刪除了
	防止越界,可能一直刪除到空間外了導(dǎo)致越界
	//
	檢查方法一:太“溫柔”,返回后不知道自己錯(cuò)了
	if (ps->size == 0)
	{
		return; //直接返回 即可
	}
	//
	檢查方法二:使用斷言,錯(cuò)誤了會(huì)直接報(bào)錯(cuò)并給出錯(cuò)誤信息
	//assert(ps->size > 0); //順序表中有效數(shù)據(jù)大于0才進(jìn)行下面的操作

	直接有效數(shù)據(jù)size--即可
	尾插是也是用size插入的,所以下次添加時(shí)直接就覆蓋了原來(lái)值
	//ps->size--;

	不能局部釋放,不能說(shuō)不要末尾的值就把末尾的這個(gè)空間直接釋放掉
	C++有個(gè)規(guī)定,malloc一次就要free一次,要free釋放的話只能整體釋放
	順序表的物理內(nèi)存是連續(xù)的,釋放空間是不能“分期”的


	//復(fù)用SLErase函數(shù) -- 改寫(xiě)尾刪函數(shù)SLPopBack
	SLErase(ps, ps->size-1); //size-1 就是最末元素下標(biāo)
}



//頭插(實(shí)現(xiàn)) -- 將值插入順序表頭部:
void SLPushFront(SL* ps, SLDataType x)
{
	//assert斷言,防止接收空指針:
	assert(ps);

	調(diào)用內(nèi)部函數(shù)進(jìn)行擴(kuò)容操作:
	//SLCheckCapacity(ps);

	將現(xiàn)有有效數(shù)據(jù)往后移一位,讓出頭位置:
	//int end = ps->size - 1; 
	size-1 有效個(gè)數(shù)-1,就相當(dāng)于當(dāng)前最后一個(gè)元素的下標(biāo)

	//while (end >= 0)
	//	//使用while循環(huán)循環(huán)移動(dòng)各個(gè)有效元素,一直移到下標(biāo)為0的元素
	//{
	//	ps->a[end + 1] = ps->a[end]; //end下標(biāo)元素 移到 下一位上
	//	--end; //改變下標(biāo)
	//}

	將要插入頭部的元素x插入頭部:
	//ps->a[0] = x;

	有效個(gè)數(shù)加一:
	//ps->size++;

	Capacity在擴(kuò)容函數(shù)SLCheckCapacity中就修改好了


	//復(fù)用SLInsert函數(shù) -- 改寫(xiě)頭插函數(shù)SLPushFront
	SLInsert(ps, 0, x); //在0位置插入就相當(dāng)于頭插
}



//頭刪(實(shí)現(xiàn)) -- 將值從順序表頭部刪除:
void SLPopFront(SL* ps)
{
	//assert斷言,防止接收空指針:
	assert(ps);

	因?yàn)橐獙㈩^部的有效元素刪除,
	所以直接把第一個(gè)有效元素后面的其他元素往前移一位就行了,
	覆蓋掉第一個(gè)元素

	先進(jìn)行斷言檢查,防止沒(méi)有元素還進(jìn)行刪除:
	//assert(ps->size > 0);

	//int begin = 1; //從下標(biāo)為1的元素開(kāi)始往前移,把下標(biāo)為0的元素覆蓋

	//while (begin < ps->size)
	//	//只要begin還小于有效元素個(gè)數(shù)就繼續(xù)往前移
	//	//因?yàn)槭菑南聵?biāo)為1的元素開(kāi)始移動(dòng),
	//	//所以最后就只有下標(biāo)為0的元素沒(méi)動(dòng)
	//{
	//	//把當(dāng)前begin下標(biāo)的元素往前挪一位:
	//	ps->a[begin - 1] = ps->a[begin]; 

	//	//當(dāng)前begin下標(biāo)元素移動(dòng)后,begin++繼續(xù)移動(dòng)下一位:
	//	++begin;
	//}
	//
	因?yàn)榈谝粋€(gè)元素被覆蓋,所以有效元素size--
	//ps->size--;


	//復(fù)用SLErase函數(shù) -- 改寫(xiě)頭刪函數(shù)SLPopFront
	SLErase(ps, 0); //頭元素下標(biāo)是0
}



//在指定位置(pos)插入想要的值(x)
void SLInsert(SL* ps, int pos, SLDataType x)
{
	//先使用assert檢查pos是否合法:
	//在pos位置插入一個(gè)值后,順序表還得是連續(xù)的
	assert(pos >= 0 && pos <= ps->size);
	//pos等于0 -- 相等于頭插
	//pos等于size -- 相等于尾插
	
	//使用SLCheckCapacity進(jìn)行擴(kuò)容操作:
	SLCheckCapacity(ps);

	//定義一個(gè)變量end,對(duì)應(yīng)要移動(dòng)元素的下標(biāo)
	int end = ps->size - 1; //一開(kāi)始對(duì)應(yīng)最后一個(gè)元素的下標(biāo)

	while (end >= pos)
		//只要end下標(biāo)對(duì)應(yīng)的元素還在pos下標(biāo)元素的右邊
		//就把“end元素”向右移,移到pos下標(biāo)無(wú)元素
	{
		//把“end元素”向右移
		ps->a[end + 1] = ps->a[end];
		
		//移動(dòng)下標(biāo)進(jìn)行寫(xiě)一個(gè)元素的移動(dòng)
		--end;
	}

	//讓出位置后,將接收的x插入pos位置:
	ps->a[pos] = x;

	//有效元素+1:
	ps->size++;
}



//查找x這個(gè)值在順序表中的下標(biāo)是多少:
int SLFind(SL* ps, SLDataType x) //返回找到的下標(biāo)
{
	//assert斷言,防止接收空指針:
	assert(ps);

	//數(shù)據(jù)量不大的話直接暴力查找吧:
	for (int i = 0; i < ps->size; i++)
		//有幾個(gè)有效元素就循環(huán)幾次:
	{
		if (ps->a[i] == x)
			//該下標(biāo)元素等于要找的值x則返回當(dāng)前下標(biāo):
		{
			return i;
		}
	}

	return -1; //表未找到該元素下標(biāo)
}



//刪除指定位置(pos)的值:
void SLErase(SL* ps, int pos)
{
	//同樣先使用assert檢查pos是否合法:
	//這里檢查條件pos不能像SLInsert一樣等于size
	//因?yàn)閟ize空了能插入(尾插),但不能刪除
	assert(pos >= 0 && pos < ps->size);

	//指定刪除和頭刪的思路類(lèi)似,
	//只要把pos后面的值往前覆蓋,覆蓋掉pos的值就好了:

	int begin = pos + 1; //從pos+1的位置往前挪
	
	while (begin < ps->size)
		//一直移到size為止(不包括size位置)
	{
		ps->a[begin - 1] = ps->a[begin]; //往前挪
		++begin; //挪完繼續(xù)挪下一個(gè) 
	}

	ps->size--; //覆蓋掉pos位置的值后,有效數(shù)字減一
}



//把pos位置的值修改為x
void SLModify(SL* ps, int pos, SLDataType x)
{
	//同樣先使用assert斷言檢查pos是否合法:
	assert(pos >= 0 && pos < ps->size);

	//進(jìn)行修改:
	ps->a[pos] = x;
}

? ? ? ? ? ? ? ? ? ? ? ??

--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ??

test.c -- 測(cè)試函數(shù)

#define _CRT_SECURE_NO_WARNINGS 1

//包含我們寫(xiě)的 SeqList.h 頭文件
#include "SeqList.h"

//分組測(cè)試,測(cè)試不同的函數(shù)--SLPushBack 和 SLPopBack 函數(shù)
void TestSeqList1()
{
	SL sl;  //創(chuàng)建順序表類(lèi)型變量

	//使用 SLInit函數(shù) 初始化順序表類(lèi)型變量
	//注意傳遞的是變量的地址,防止形參改變實(shí)參不改變
	SLInit(&sl);

	//使用尾插函數(shù)SLPushBack:
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//此時(shí)再調(diào)用會(huì)進(jìn)行擴(kuò)容:
	SLPushBack(&sl, 5);
	SLPushBack(&sl, 6);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否插入成功:
	SLPrint(&sl);

	//測(cè)試尾刪函數(shù)SLPopBack:
	SLPopBack(&sl);
	SLPopBack(&sl);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否“刪除”成功:
	SLPrint(&sl);

	//測(cè)試完后使用SLDestroy函數(shù)銷(xiāo)毀順序表:
	SLDestroy(&sl);
}

//分組測(cè)試,測(cè)試不同的函數(shù)--SLPushFront函數(shù)
void TestSeqList2()
{
	SL sl;  //創(chuàng)建順序表類(lèi)型變量

	//使用 SLInit函數(shù) 初始化順序表類(lèi)型變量
	//注意傳遞的是變量的地址,防止形參改變實(shí)參不改變
	SLInit(&sl);

	//使用尾插函數(shù)SLPushBack:
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//此時(shí)再調(diào)用會(huì)進(jìn)行擴(kuò)容:
	SLPushBack(&sl, 5);
	SLPushBack(&sl, 6);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否插入成功:
	SLPrint(&sl);

	//測(cè)試頭插函數(shù)SLPushFront:
	SLPushFront(&sl, 10);
	SLPushFront(&sl, 20);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否“刪除”成功:
	SLPrint(&sl);

	//測(cè)試完后使用SLDestroy函數(shù)銷(xiāo)毀順序表:
	SLDestroy(&sl);
}


//分組測(cè)試,測(cè)試不同的函數(shù)--SLPopFront函數(shù)
void TestSeqList3()
{
	SL sl;  //創(chuàng)建順序表類(lèi)型變量

	//使用 SLInit函數(shù) 初始化順序表類(lèi)型變量
	//注意傳遞的是變量的地址,防止形參改變實(shí)參不改變
	SLInit(&sl);

	//使用尾插函數(shù)SLPushBack:
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//此時(shí)再調(diào)用會(huì)進(jìn)行擴(kuò)容:
	SLPushBack(&sl, 5);
	SLPushBack(&sl, 6);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否插入成功:
	SLPrint(&sl);

	//測(cè)試頭刪函數(shù)SLPopFront:
	SLPopFront(&sl);
	SLPopFront(&sl);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否“刪除”成功:
	SLPrint(&sl);

	//測(cè)試完后使用SLDestroy函數(shù)銷(xiāo)毀順序表:
	SLDestroy(&sl);
}

//分組測(cè)試,測(cè)試不同的函數(shù)--SLInsert函數(shù)
void TestSeqList4()
{
	SL sl;  //創(chuàng)建順序表類(lèi)型變量

	//使用 SLInit函數(shù) 初始化順序表類(lèi)型變量
	//注意傳遞的是變量的地址,防止形參改變實(shí)參不改變
	SLInit(&sl);

	//使用尾插函數(shù)SLPushBack:
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//此時(shí)再調(diào)用會(huì)進(jìn)行擴(kuò)容:
	SLPushBack(&sl, 5);
	SLPushBack(&sl, 6);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否插入成功:
	SLPrint(&sl);

	//測(cè)試指定增加函數(shù)SLInsert:
	SLInsert(&sl, 2, 100);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否“刪除”成功:
	SLPrint(&sl);

	//int x;
	//scanf("%d", &x);
	//int pos = SLFind(&sl, x);
	//if (pos != -1)
	//{
	//	SLInsert(&sl, pos, x * 10);
	//}
	//SLPrint(&sl);

	//測(cè)試完后使用SLDestroy函數(shù)銷(xiāo)毀順序表:
	SLDestroy(&sl);
}


//分組測(cè)試,測(cè)試不同的函數(shù)--SLFind函數(shù)
void TestSeqList5()
{
	SL sl;  //創(chuàng)建順序表類(lèi)型變量

	//使用 SLInit函數(shù) 初始化順序表類(lèi)型變量
	//注意傳遞的是變量的地址,防止形參改變實(shí)參不改變
	SLInit(&sl);

	//使用尾插函數(shù)SLPushBack:
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//此時(shí)再調(diào)用會(huì)進(jìn)行擴(kuò)容:
	SLPushBack(&sl, 5);
	SLPushBack(&sl, 6);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否插入成功:
	SLPrint(&sl);

	//測(cè)試指定增加函數(shù)SLFind:
	int pos = SLFind(&sl, 2);
	
	printf("2在元素中是第%d個(gè)元素", pos+1);

	//測(cè)試完后使用SLDestroy函數(shù)銷(xiāo)毀順序表:
	SLDestroy(&sl);
}

//分組測(cè)試,測(cè)試不同的函數(shù)--SLErase函數(shù)
void TestSeqList6()
{
	SL sl;  //創(chuàng)建順序表類(lèi)型變量

	//使用 SLInit函數(shù) 初始化順序表類(lèi)型變量
	//注意傳遞的是變量的地址,防止形參改變實(shí)參不改變
	SLInit(&sl);

	//使用尾插函數(shù)SLPushBack:
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//此時(shí)再調(diào)用會(huì)進(jìn)行擴(kuò)容:
	SLPushBack(&sl, 5);
	SLPushBack(&sl, 6);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否插入成功:
	SLPrint(&sl);

	int x;
	scanf("%d", &x);
	//配合SLFind函數(shù),找到順序表中某個(gè)值的下標(biāo)
	int pos = SLFind(&sl, x);
	//再使用SLErase函數(shù)通過(guò)下標(biāo)刪除該值
	if (pos != -1)
	{
		SLErase(&sl, pos);
	}
	SLPrint(&sl);

	//測(cè)試完后使用SLDestroy函數(shù)銷(xiāo)毀順序表:
	SLDestroy(&sl);
}


//分組測(cè)試,測(cè)試不同的函數(shù)--SLModify函數(shù)
void TestSeqList7()
{
	SL sl;  //創(chuàng)建順序表類(lèi)型變量

	//使用 SLInit函數(shù) 初始化順序表類(lèi)型變量
	//注意傳遞的是變量的地址,防止形參改變實(shí)參不改變
	SLInit(&sl);

	//使用尾插函數(shù)SLPushBack:
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//此時(shí)再調(diào)用會(huì)進(jìn)行擴(kuò)容:
	SLPushBack(&sl, 5);
	SLPushBack(&sl, 6);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否插入成功:
	SLPrint(&sl);
	
	//測(cè)試指定增加函數(shù)SLInsert:
	SLModify(&sl, 2, 100);
	//調(diào)用測(cè)試函數(shù)SPrint查看是否“刪除”成功:
	SLPrint(&sl);

	//測(cè)試完后使用SLDestroy函數(shù)銷(xiāo)毀順序表:
	SLDestroy(&sl);
}

//菜單:
void menu()
{
	printf("********************************\n");
	printf("1、尾插			2、頭插\n");
	printf("3、頭刪			4、尾刪\n");
	printf("7、打印			-1、退出\n");
	printf("********************************\n");
}


int main()
{
	//先創(chuàng)建一個(gè)順序表:
	SL sl;

	//再對(duì)其進(jìn)行初始化:
	SLInit(&sl);

	//創(chuàng)建一個(gè)變量接收菜單選項(xiàng):
	int option = 0;

	do
	{
		//使用菜單:
		menu();
		//打印提示信息:
		printf("請(qǐng)選擇想要進(jìn)行的操作的序號(hào):>");
		//接收序號(hào):
		scanf("%d", &option);
		
		printf("\n");

		if (option == 1)
		{
			printf("請(qǐng)依次輸入你要插入的數(shù)據(jù)個(gè)數(shù):>");
			int n = 0; //接收數(shù)據(jù)個(gè)數(shù)
			scanf("%d", &n); //接收數(shù)據(jù)個(gè)數(shù)
			
			printf("\n");
			printf("請(qǐng)依次輸入你要插入的數(shù)據(jù)\n");

			//知道數(shù)據(jù)個(gè)數(shù)后,直接使用for循環(huán)循環(huán)接收數(shù)據(jù)
			int x = 0;
			for (int i = 0; i < n; i++)
			{
				scanf("%d", &x);
				SLPushBack(&sl, x);
			}
		}
		else if (option == 7)
		{
			SLPrint(&sl);
		}

	} while (option != -1);
	

	//最后銷(xiāo)毀順序表:
	SLDestroy(&sl);


	//TestSeqList1();
	//TestSeqList2();
	//TestSeqList3();
	//TestSeqList4();
	//TestSeqList5();
	//TestSeqList6();
	//TestSeqList7();

	return 0;
}

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

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)初階】三、 線性表里的鏈表(無(wú)頭+單向+非循環(huán)鏈表 -- C語(yǔ)言實(shí)現(xiàn))

    【數(shù)據(jù)結(jié)構(gòu)初階】三、 線性表里的鏈表(無(wú)頭+單向+非循環(huán)鏈表 -- C語(yǔ)言實(shí)現(xiàn))

    ========================================================================= 相關(guān)代碼gitee自取 : C語(yǔ)言學(xué)習(xí)日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表(C語(yǔ)言實(shí)現(xiàn)順序表)-CSDN博客 ?=========================

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

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

    ========================================================================= 相關(guān)代碼gitee自取 : C語(yǔ)言學(xué)習(xí)日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 【數(shù)據(jù)結(jié)構(gòu)初階】四、線性表里的鏈表(帶頭+雙向+循環(huán) 鏈表 -- C語(yǔ)言實(shí)現(xiàn))_高高的胖子的博客

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

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

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

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

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

    了解到學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的重要性后,又學(xué)習(xí)了評(píng)判程序效率高低算法好壞的標(biāo)準(zhǔn),時(shí)間空間復(fù)雜度。接下來(lái),進(jìn)行一些簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)的初步學(xué)習(xí)。所有數(shù)據(jù)結(jié)構(gòu)中存在著可以劃分為一大類(lèi)的簡(jiǎn)單結(jié)構(gòu), 線性表 ,即在 邏輯上都呈現(xiàn)線性關(guān)系 的數(shù)據(jù)結(jié)構(gòu)(物理結(jié)構(gòu)上不一定

    2024年01月20日
    瀏覽(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)入對(duì)數(shù)據(jù)結(jié)構(gòu)的講解,開(kāi)始前友友們要有C語(yǔ)言的基礎(chǔ),熟練掌握 動(dòng)態(tài)內(nèi)存管理 、 結(jié)構(gòu)體 、 指針 等章節(jié),方便后續(xù)的學(xué)習(xí)。 順序表(Sequence List) 順序表的分類(lèi) 靜態(tài)順序表 動(dòng)態(tài)順序表 順序表的功能 初始化 擴(kuò)

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

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

    目錄 一.堆的概念及結(jié)構(gòu) 1.1.堆的概念 1.2.堆的存儲(chǔ)結(jié)構(gòu) 二.堆的功能實(shí)現(xiàn) 2.1.堆的定義 2.2.堆的初始化 2.3.堆的銷(xiāo)毀 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)之---二叉樹(shù)的順序結(jié)構(gòu)-堆

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

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

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

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

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

    2024年01月20日
    瀏覽(17)
  • 數(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語(yǔ)言和順序表實(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):線性表順序存儲(chǔ)結(jié)構(gòu)———順序表

    目錄 順序表的定義 初始化線性表 銷(xiāo)毀線性表 求線性表的長(zhǎng)度 判斷是否為空表 插入數(shù)據(jù)元素 邏輯序號(hào)與物理序號(hào)的區(qū)別 刪除數(shù)據(jù)元素 輸出線性表 ?按序號(hào)求線性表中的元素 按元素值查找 整體上創(chuàng)建順序表 順序表實(shí)驗(yàn) 線性表的順序存儲(chǔ)是把線性表中的所有元素按照其邏輯

    2024年02月03日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包