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

數(shù)據(jù)結(jié)構(gòu)入門 — 順序表詳解

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

前言

數(shù)據(jù)結(jié)構(gòu)入門 — 順序表詳解
博客主頁鏈接:https://blog.csdn.net/m0_74014525
關注博主,后期持續(xù)更新系列文章
文章末尾有源碼
*****感謝觀看,希望對你有所幫助*****



一、順序表

1. 順序表是什么

順序表是連續(xù)存儲的
順序表是一種線性表的數(shù)據(jù)結(jié)構(gòu),它的數(shù)據(jù)元素按照一定次序依次存儲在計算機存儲器中,使用連續(xù)的存儲空間來存儲。順序表中每個數(shù)據(jù)元素的位置都有一個序號,這個序號也稱為元素在順序表中的下標。順序表的特點是:元素的邏輯順序與物理順序相同,支持隨機訪問,插入和刪除元素的時間復雜度為O(n),查找元素的時間復雜度為O(1)。

2. 優(yōu)缺點

優(yōu)點
優(yōu)點是訪問速度快,因為它的元素在內(nèi)存中是連續(xù)存儲的,可以直接通過下標訪問,而且不需要額外的空間來存儲指向下一個節(jié)點的指針。
缺點
缺點是插入和刪除元素的時間復雜度為O(n),因為需要移動其他元素的位置,而且不利于動態(tài)擴展容量。


二、概念及結(jié)構(gòu)

元素的類型、元素的個數(shù)、數(shù)組的大小和數(shù)組的指針
順序表的實現(xiàn)需要預留一段連續(xù)的存儲空間來存儲所有的元素,目前常見的實現(xiàn)方式是使用數(shù)組來實現(xiàn)順序表。數(shù)組的地址是連續(xù)的,因此可以通過數(shù)組下標進行快速訪問元素。為了實現(xiàn)順序表,需要定義一個數(shù)據(jù)結(jié)構(gòu),包含元素的類型、元素的個數(shù)、數(shù)組的大小和數(shù)組的指針等信息。

1. 靜態(tài)順序表

靜態(tài)順序表是一種使用連續(xù)存儲空間實現(xiàn)的線性表結(jié)構(gòu),其特點是在創(chuàng)建表時就需要預先分配好固定長度的存儲空間,表長也就固定了下來,不能動態(tài)擴展或縮小。

在靜態(tài)順序表中,數(shù)據(jù)元素按照順序依次存放,每個元素都占用相同的存儲空間,而且元素在內(nèi)存中的地址也是連續(xù)的。
數(shù)據(jù)結(jié)構(gòu)入門 — 順序表詳解,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),開發(fā)語言,c++,c語言,算法

2. 動態(tài)順序表

動態(tài)順序表是一種線性表的實現(xiàn)方式,它在靜態(tài)順序表的基礎上,將存儲空間由固定長度改為動態(tài)分配。

當動態(tài)順序表中存放的元素個數(shù)達到當前存儲空間的上限時,可以重新申請更大的空間來存放更多的元素,因此動態(tài)順序表的長度是可變的。動態(tài)順序表的實現(xiàn)通常采用數(shù)組形式,通過realloc函數(shù)來動態(tài)分配空間。

數(shù)據(jù)結(jié)構(gòu)入門 — 順序表詳解,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),開發(fā)語言,c++,c語言,算法


三、順序表接口實現(xiàn)(代碼演示)

1. 動態(tài)存儲結(jié)構(gòu)

即定義順序表的結(jié)構(gòu)。由動態(tài)開辟的數(shù)組、有效數(shù)據(jù)個數(shù)和容量空間的大小組成

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

2. 順序表打印

使用循環(huán),將順序表遍歷一遍,進行打印

//打印順序表
void SLPrint(SL* pc)
{
	assert(pc);
	int i = 0;
	for (i = 0; i < pc->size; i++)
	{
		printf("%d ", pc->a[i]);
	}
	printf("\n");
}

3. 順序表初始化

在順便表初始化時,先用malloc開辟4個空間,如果開啟失敗報錯并返回

//初始化順序表
void SLInit(SL *pc)
{
	assert(pc);
	//開啟內(nèi)存  
	pc->a=(SLDataType*)malloc(sizeof(SLDataType) * 4);
	//檢查是否開辟成功
	if (pc->a==NULL)
	{
		perror("SLInit");
		//return;
		exit(-1);
	}
	pc->capacity = 4;
	pc->size = 0;
}

4. 檢查空間大小

檢查空間,當順序表內(nèi)的數(shù)據(jù)等于初始化開辟的空間時,再開辟4個空間(用realloc開辟乘2的空間)

//檢查內(nèi)存容量
void SLCheckCapacity(SL* pc)
{
	assert(pc);
	if (pc->size == pc->capacity)
	{
		SLDataType*tem = (SLDataType*)realloc(pc->a, sizeof(SLDataType)*2*pc->capacity);  //要乘以2
		if (tem == NULL)
		{
			perror("SLCheckCapacity");
			exit(-1);
		}
		pc->a = tem;
		pc->capacity *= 2;
	}
}

5. 增刪查改接口

以增刪查改順序依次編排
頭插:
頭插,即在順序表頭部進行插入數(shù)值,在SLCheckCapacity檢查空間是否充足后,進行插入數(shù)值

//頭插
void SLPushFront(SL* pc,SLDataType x)
{
	assert(pc);
	SLCheckCapacity(pc);
	int end = pc->size - 1;
	while (end >=0)
	{
		pc->a[end + 1] = pc->a[end];
		--end;
	}
	pc->a[0] = x;
	pc->size++;
}

尾插:
尾插,即找到順序表的尾,下標為pc->size的位置插入數(shù)值

//尾插
void SLPushBack(SL* pc, SLDataType x)
{
	assert(pc);
	SLCheckCapacity(pc);
	pc->a[pc->size] = x;
	pc->size++;
}

頭刪:
頭刪,將后面的數(shù)值依次向前覆蓋。覆蓋時要注意順序,將在前的先覆蓋,防止數(shù)組丟失,然后將順序表的size(數(shù)據(jù)個數(shù)減一)

//頭刪
void SLPopFront(SL* pc)
{
	assert(pc);
	int start = 1;
	while (start < pc->size)
	{
		pc->a[start] = pc->a[start + 1];
		++start;
	}
	pc->size--;
}

尾刪:
尾刪,即將有效數(shù)據(jù)減一,直接將pc所指向的size減一

//尾刪
void SLPopBack(SL* pc)
{
	assert(pc->size > 0);

	pc->size--;
}

查找:
查找方法有很多種,這里使用暴力查找,將順序表遍歷一遍,找到要找的元素并返回下標

//查找數(shù)字位置
int SLFind(SL* pc, SLDataType x)
{
	int i = 0;
	for (i = 0; i < pc->size; i++)
	{
		if (pc->a[i] == x)
		{
			return i;
		}
	}
	return -1;
}

指定位置插入
這里配合查找函數(shù)使用,找到要找的數(shù)值的下標,進入下列函數(shù),將pos之后的值依次下向后移動,在pos位置插入數(shù)值

// 在pos位置插入x
void SLInsert(SL* pc, int pos, SLDataType x)
{
	assert(pc);
	assert(pos >= 0 && pos <= pc->size);
	SLCheckCapacity(pc);
	int end = pc->size - 1;
	while (end >= pos)

	{

		pc->a[end + 1] = pc->a[end];
		--end;
	}
	pc->a[pos] = x;
	pc->size++;

}

指定位置刪除
這里配合查找函數(shù)使用,找到要找的數(shù)值的下標,進入下列函數(shù),將pos位置后的數(shù)值依次向前覆蓋

// 刪除pos位置的值
void SLErase(SL* pc, int pos)
{
	assert(pc);
	assert(pos >= 0 && pos < pc->size);
	int start = pos+ 1;
	while (start < pc->size)
	{
		pc->a[start - 1] = pc->a[start];
		++start;

	}
	pc->size--;
}

更改指定位置
這里配合查找函數(shù)使用,找到要找的數(shù)值的下標,進入下列函數(shù),將pos位置的值進行修改

//更改制定位置的數(shù)字
void SLModify(SL* pc, int pos, SLDataType x)
{
	assert(pc);
	assert(pos >= 0 && pos < pc->size);
	pc->a[pos] = x;
 }

6. 順序表銷毀

順序表進行銷毀,將開辟的數(shù)值空間進行釋放,并置為空(NULL)將空間和數(shù)據(jù)個數(shù)置為0 ,這樣順序表就銷毀完成


//銷毀釋放內(nèi)存
void SLDestroy(SL* pc)
{
	assert(pc);
	free(pc->a);
	pc->a=NULL;
	pc->capacity = 0;
	pc->size=0;
}


四、所有文件代碼

1. Gitee鏈接

***查看所有代碼***
點擊右邊藍色文字 DuckBro Gitee 代碼倉庫


總結(jié)

順序表是一種線性表,它的重點是:

  1. 物理結(jié)構(gòu):順序表的數(shù)據(jù)元素在內(nèi)存中是連續(xù)存放的,即使用一段連續(xù)的存儲空間來存儲線性表的元素。

  2. 邏輯結(jié)構(gòu):順序表是一種線性表,它的元素在邏輯上是依次排列的。

  3. 數(shù)據(jù)操作:順序表支持基本的數(shù)據(jù)操作,包括插入、刪除、查找等操作。其中,插入和刪除操作需要移動大量元素,時間復雜度較高,而查找操作可以通過使用二分查找等算法來提高效率。

  4. 容量管理:順序表的容量是由數(shù)組的長度來決定的。如果數(shù)組長度不夠,順序表需要進行擴容操作,如果數(shù)組長度過長,會浪費內(nèi)存空間。

  5. 性能特點:由于順序表的數(shù)據(jù)元素在內(nèi)存中是連續(xù)存放的,所以順序表具有快速的隨機訪問能力,但插入、刪除操作較為耗時。因此,適合于需要隨機訪問元素,但不頻繁進行插入、刪除操作的場景。順序表


如這篇博客對大家有幫助的話,希望 三連 支持一下 ?。?! 如果有錯誤感謝大佬的斧正 如有 其他見解發(fā)到評論區(qū),一起學習 一起進步。文章來源地址http://www.zghlxwxcb.cn/news/detail-668085.html

到了這里,關于數(shù)據(jù)結(jié)構(gòu)入門 — 順序表詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 追夢之旅【數(shù)據(jù)結(jié)構(gòu)篇】——詳解C語言動態(tài)實現(xiàn)順序表

    追夢之旅【數(shù)據(jù)結(jié)構(gòu)篇】——詳解C語言動態(tài)實現(xiàn)順序表

    ? ? ??博客昵稱:博客小夢 ??最喜歡的座右銘:全神貫注的上吧?。。???作者簡介:一名熱愛C/C++,算法等技術、喜愛運動、熱愛K歌、敢于追夢的小博主! ??博主小留言:哈嘍! ??各位CSDN的uu們,我是你的博客好友小夢,希望我的文章可以給您帶來一定的幫助,話不

    2024年01月24日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實現(xiàn)應用

    數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實現(xiàn)應用

    普通的二叉樹是不適合用數(shù)組來存儲的,因為可能會存在大量的空間浪費。而完全二叉樹更適合使用順序結(jié)構(gòu)存儲。現(xiàn)實中我們通常把堆(一種二叉樹)使用 順序結(jié)構(gòu)的數(shù)組來存儲 ,需要注意的是 這里的堆和操作系統(tǒng)虛擬進程地址空間中的堆是兩回事 ,一個是 數(shù)據(jù)結(jié)構(gòu) ,一

    2023年04月19日
    瀏覽(28)
  • 『初階數(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.關于順序表的OJ題 6.OJ答案及解析 1.移除元素 2.刪除有序數(shù)組中的重復項 ?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)
  • 數(shù)據(jù)結(jié)構(gòu)入門(C語言版)線性表中順序表介紹及接口實現(xiàn)

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

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

    2023年04月12日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法初階(C語言)】復雜鏈表(隨機指針,隨機鏈表的復制)題目詳解+鏈表順序表結(jié)尾

    【數(shù)據(jù)結(jié)構(gòu)和算法初階(C語言)】復雜鏈表(隨機指針,隨機鏈表的復制)題目詳解+鏈表順序表結(jié)尾

    目錄 ?1.隨機鏈表的復制 1.2題目描述? 1.3題目分析 1.4解題: 2.順序表和鏈表對比 2.1cpu高速緩存利用率 3.結(jié)語 一個長度為? n ?的鏈表,每個節(jié)點包含一個額外增加的隨機指針? random ? 該指針可以指向鏈表中的任何節(jié)點或空節(jié)點。? ? ? ? 構(gòu)造這個鏈表的? 深拷貝 。?深拷貝

    2024年03月10日
    瀏覽(93)
  • 數(shù)據(jù)結(jié)構(gòu)入門指南:順序表

    數(shù)據(jù)結(jié)構(gòu)入門指南:順序表

    目錄 文章目錄 前言 順序表 靜態(tài)順序表 動態(tài)順序表 總結(jié) ????????今天我們正式進入對數(shù)據(jù)結(jié)構(gòu)的學習,順序表是數(shù)據(jù)結(jié)構(gòu)中最簡單的一種線性數(shù)據(jù)結(jié)構(gòu),也是數(shù)據(jù)結(jié)構(gòu)入門的試金石,如果對于順序表中內(nèi)容理解過難,可以先填補一下C語言中結(jié)構(gòu)體、動態(tài)內(nèi)存管理及指針

    2024年02月15日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)與算法——順序表(順序存儲結(jié)構(gòu))及初始化詳解

    數(shù)據(jù)結(jié)構(gòu)與算法——順序表(順序存儲結(jié)構(gòu))及初始化詳解

    順序表 ,全名 順序存儲結(jié)構(gòu) ,是線性表的一種。通過《什么是線性表》一節(jié)的學習我們知道,線性表用于存儲邏輯關系為“一對一”的數(shù)據(jù),順序表自然也不例外。 不僅如此,順序表對數(shù)據(jù)的物理存儲結(jié)構(gòu)也有要求。 順序表存儲數(shù)據(jù)時,會提前申請一整塊足夠大小的物理

    2024年02月16日
    瀏覽(31)
  • 數(shù)據(jù)結(jié)構(gòu):順序表詳解

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

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

    2024年02月14日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】——順序表詳解

    【數(shù)據(jù)結(jié)構(gòu)】——順序表詳解

    大家好!當我們學習了動態(tài)內(nèi)存管理后,就可以寫一個管理數(shù)據(jù)的順序表了?。?! 順序表的理解: 線性表是最基本、最簡單、也是最常用的一種數(shù)據(jù)結(jié)構(gòu)。線性表(linear list)是數(shù)據(jù)結(jié)構(gòu)的一種,一個線性表是n個具有相同特性的數(shù)據(jù)元素的有限序列。 順序表是在計算機內(nèi)存

    2024年02月08日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包