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

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

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

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

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

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

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

接上期

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

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

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

1 . 線性表

? ? ? ? ? ? ? ?

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

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

常見線性表順序表、鏈表、隊列、字符串...

順序表示例:

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

? ? ? ? ? ? ??

? ? ? ? ? ? ??

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

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

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

鏈表示例:

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

? ? ? ? ?

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

? ? ? ? ? ? ?

2 . 順序表

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

? ? ? ? ? ? ? ?

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

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

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

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

? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ?

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

? ? ? ? ? ? ? ??

因為靜態(tài)順序表使用定長數(shù)組存儲元素

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

示例:

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

? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ??

動態(tài)順序表:使用動態(tài)開辟的數(shù)組存儲元素

? ? ? ? ? ? ?

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

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

所以現(xiàn)實中基本都是使用動態(tài)順序表,根據(jù)需要動態(tài)地分配空間大小

示例:

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

? ? ? ? ?

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

? ? ? ? ? ? ?

3 .接口實現(xiàn)(實現(xiàn)動態(tài)順序表):

(詳細(xì)解釋在注釋,代碼分文件放最后)

? ? ? ? ? ? ? ??

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

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

? ? ? ? ? ? ??

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

就可以對其進(jìn)行增刪改查等操作實現(xiàn)動態(tài)順序表

? ? ? ? ? ? ? ? ? ? ??文章來源地址http://www.zghlxwxcb.cn/news/detail-714890.html

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

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

↓↓↓↓↓

? ? ? ? ? ? ? ? ?

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

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

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

? ? ? ? ? ? ?

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

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

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

↓↓↓↓↓

? ? ? ? ? ? ? ? ??

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

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

? ? ? ? ? ? ? ? ? ? ?

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

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

↓↓↓↓↓

? ? ? ? ? ? ? ? ?

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

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

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

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

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

? ? ? ? ? ? ? ? ? ?

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

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

↓↓↓↓↓

? ? ? ? ? ? ? ? ??

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

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

? ? ? ? ? ? ? ? ? ? ?

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

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

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

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

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

?? ? ? ? ?

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

? ? ? ? ? ? ?

4 . 對應(yīng)代碼

SeqList.h -- 順序表頭文件

#pragma once

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


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


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

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


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

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

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

//寫一個測試函數(shù)(聲明),方便檢查各步驟有沒有問題:
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這個值在順序表中的下標(biāo)是多少:
int SLFind(SL* ps, SLDataType x); //返回找到的下標(biāo)

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

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

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

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

? ? ? ? ? ? ? ? ??

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

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

#define _CRT_SECURE_NO_WARNINGS 1

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


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

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

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

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

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



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

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

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



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

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

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



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

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

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

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


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

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



//尾插(實現(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; 
	因為下標(biāo)從0開始,所以size的值會等于現(xiàn)有元素下一位的下標(biāo)

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

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



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

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

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

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


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



//頭插(實現(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 有效個數(shù)-1,就相當(dāng)于當(dāng)前最后一個元素的下標(biāo)

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

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

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

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


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



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

	因為要將頭部的有效元素刪除,
	所以直接把第一個有效元素后面的其他元素往前移一位就行了,
	覆蓋掉第一個元素

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

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

	//while (begin < ps->size)
	//	//只要begin還小于有效元素個數(shù)就繼續(xù)往前移
	//	//因為是從下標(biāo)為1的元素開始移動,
	//	//所以最后就只有下標(biāo)為0的元素沒動
	//{
	//	//把當(dāng)前begin下標(biāo)的元素往前挪一位:
	//	ps->a[begin - 1] = ps->a[begin]; 

	//	//當(dāng)前begin下標(biāo)元素移動后,begin++繼續(xù)移動下一位:
	//	++begin;
	//}
	//
	因為第一個元素被覆蓋,所以有效元素size--
	//ps->size--;


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



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

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

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

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

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



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

	//數(shù)據(jù)量不大的話直接暴力查找吧:
	for (int i = 0; i < ps->size; i++)
		//有幾個有效元素就循環(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
	//因為size空了能插入(尾插),但不能刪除
	assert(pos >= 0 && pos < ps->size);

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

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

	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 -- 測試函數(shù)

#define _CRT_SECURE_NO_WARNINGS 1

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

			//知道數(shù)據(jù)個數(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);
	

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


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

	return 0;
}

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)初階】二、 線性表里的順序表(C語言實現(xiàn)順序表)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)初階】八、非線性表里的二叉樹(二叉樹的實現(xiàn) -- C語言鏈?zhǔn)浇Y(jié)構(gòu))

    【數(shù)據(jù)結(jié)構(gòu)初階】八、非線性表里的二叉樹(二叉樹的實現(xiàn) -- C語言鏈?zhǔn)浇Y(jié)構(gòu))

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

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

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

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

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

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

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

    2024年02月03日
    瀏覽(24)
  • 初階數(shù)據(jù)結(jié)構(gòu)之---順序表和鏈表(C語言)

    初階數(shù)據(jù)結(jié)構(gòu)之---順序表和鏈表(C語言)

    線性表: 線性表(linear list)是n個具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實際中廣泛使用的數(shù)據(jù)結(jié)構(gòu)。線性表在邏輯上是線性結(jié)構(gòu),也就是說是連續(xù)的一條直線。但在物理上并不一定是連續(xù)的。線性表在物理上存儲時,通常以 數(shù)組 和 鏈?zhǔn)浇Y(jié)構(gòu) 的形式存儲。

    2024年02月22日
    瀏覽(96)
  • 『初階數(shù)據(jù)結(jié)構(gòu) ? C語言』⑧ - 動態(tài)順序表詳解(附完整源碼)

    『初階數(shù)據(jù)結(jié)構(gòu) ? C語言』⑧ - 動態(tài)順序表詳解(附完整源碼)

    本章內(nèi)容 寫在前面 1.靜態(tài)與動態(tài)是指什么? 2.動態(tài)順序表結(jié)構(gòu)的定義 3.動態(tài)順序表的函數(shù)接口實現(xiàn) 4.動態(tài)順序表的問題及思考 5.關(guān)于順序表的OJ題 6.OJ答案及解析 1.移除元素 2.刪除有序數(shù)組中的重復(fù)項 ?3.合并兩個有序數(shù)組 7.動態(tài)順序表完整源碼 1.SeqList.h 2.SeqList.c ? ? 上一章

    2024年02月16日
    瀏覽(25)
  • 『初階數(shù)據(jù)結(jié)構(gòu) ? C語言』⑦ - 靜態(tài)順序表詳解(附完整源碼)

    『初階數(shù)據(jù)結(jié)構(gòu) ? C語言』⑦ - 靜態(tài)順序表詳解(附完整源碼)

    本章內(nèi)容 1.什么是線性表 2.什么是順序表? 3.靜態(tài)順序表結(jié)構(gòu)的定義 4.靜態(tài)順序表的函數(shù)接口實現(xiàn) 5.靜態(tài)順序表的問題及思考 ? ? 線性表(linear list)是n個具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實際中廣泛使用的數(shù)據(jù)結(jié)構(gòu),常見的線性表:順序表、鏈表、棧、

    2024年02月15日
    瀏覽(28)
  • C語言數(shù)據(jù)結(jié)構(gòu)(2)——線性表其一(順序表)

    C語言數(shù)據(jù)結(jié)構(gòu)(2)——線性表其一(順序表)

    歡迎來到博主的新專欄——C語言數(shù)據(jù)結(jié)構(gòu) 博主ID:代碼小豪 再開始這篇文章之前,我們假設(shè)要對10個數(shù)據(jù)進(jìn)行操作。這十個數(shù)據(jù)全都被聲明成10個變量 如果我們準(zhǔn)備為這些數(shù)據(jù)增加功能,將他們進(jìn)行賦值,打印,交換等。就會發(fā)現(xiàn)一個特別棘手的問題,這些程序?qū)懫饋硖彪s

    2024年01月19日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】六、線性表中的隊列(C語言 -- 鏈?zhǔn)浇Y(jié)構(gòu)實現(xiàn)隊列)

    【數(shù)據(jù)結(jié)構(gòu)初階】六、線性表中的隊列(C語言 -- 鏈?zhǔn)浇Y(jié)構(gòu)實現(xiàn)隊列)

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

    2024年02月08日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表的順序存儲結(jié)構(gòu)及實現(xiàn)——C語言版

    【數(shù)據(jù)結(jié)構(gòu)】線性表的順序存儲結(jié)構(gòu)及實現(xiàn)——C語言版

    線性表的順序存儲結(jié)構(gòu)稱為 順序表 ,其基本思想是 用一段地址連續(xù)的存儲單元一次存儲線性表的數(shù)據(jù)元素。 設(shè)順序表的每個元素占用 c 個存儲單元,則第 i 個元素的存儲地址為: 所以, 只要確定了存儲順序表的起始地址(即基地址),計算任意一個元素的存儲地址的時間

    2024年03月15日
    瀏覽(33)
  • 數(shù)據(jù)結(jié)構(gòu)入門(C語言版)線性表中順序表介紹及接口實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)入門(C語言版)線性表中順序表介紹及接口實現(xiàn)

    C語言的學(xué)習(xí)結(jié)束,就該入門數(shù)據(jù)結(jié)構(gòu)了呦 不論在程序員的工作上,還是在學(xué)習(xí)或是考研上,數(shù)據(jù)結(jié)構(gòu)都是一門非常重要且值得我們一直研究探索的學(xué)科,可以說數(shù)據(jù)結(jié)構(gòu)和算法就是編程的核心。OK,接下來我們來到數(shù)據(jù)結(jié)構(gòu)的入門第一步就是學(xué)習(xí)線性表,接下來由作者來詳細(xì)

    2023年04月12日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包