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

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)-----順序表(多功能動(dòng)態(tài)順序表的代碼實(shí)現(xiàn))

這篇具有很好參考價(jià)值的文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)-----順序表(多功能動(dòng)態(tài)順序表的代碼實(shí)現(xiàn))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

本篇講述了順序表的相關(guān)知識(shí),以及動(dòng)態(tài)順序表的代碼實(shí)現(xiàn)。


1.線性表

順序表和鏈表一般情況下都會(huì)叫他們線性表。

線性表(linear list)是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。線性表是一種在實(shí)際中廣泛使 用的數(shù)據(jù)結(jié)構(gòu),常見(jiàn)的線性表:順序表、鏈表、棧、隊(duì)列、字符串…

線性表在邏輯上是線性結(jié)構(gòu),也就說(shuō)是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的, 線性表在物理上存儲(chǔ)時(shí),通常以數(shù)組和鏈?zhǔn)浇Y(jié)構(gòu)的形式存儲(chǔ)。

2.順序表

順序表簡(jiǎn)單說(shuō)就是一個(gè)數(shù)組。
順序表是用一段物理地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存
儲(chǔ)。在數(shù)組上完成數(shù)據(jù)的增刪查改。

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)-----順序表(多功能動(dòng)態(tài)順序表的代碼實(shí)現(xiàn)),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),開(kāi)發(fā)語(yǔ)言

順序表一般可以分為:

  1. 靜態(tài)順序表:使用定長(zhǎng)數(shù)組存儲(chǔ)元素。
  2. 動(dòng)態(tài)順序表:使用動(dòng)態(tài)開(kāi)辟的數(shù)組存儲(chǔ)。

2.1 靜態(tài)順序表

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)-----順序表(多功能動(dòng)態(tài)順序表的代碼實(shí)現(xiàn)),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),開(kāi)發(fā)語(yǔ)言

2.2 動(dòng)態(tài)順序表

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)-----順序表(多功能動(dòng)態(tài)順序表的代碼實(shí)現(xiàn)),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),開(kāi)發(fā)語(yǔ)言
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)-----順序表(多功能動(dòng)態(tài)順序表的代碼實(shí)現(xiàn)),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),開(kāi)發(fā)語(yǔ)言

3動(dòng)態(tài)順序表代碼詳解

3.1 順序表功能(頭文件)

這里的順序表和我們之前的通訊錄有些相像,我們可以結(jié)合之前的通訊錄來(lái)學(xué)習(xí)。
鏈接: 八功能通訊錄
順序表的頭文件(功能)如下:seqList.h

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

typedef int SLDataType;

// sequence list
typedef struct SeqList
{
	SLDataType* a;
	int size;      // 有效數(shù)據(jù)
	int capacity;  // 空間容量
}SL;

void SLInit(SL* psl);//初始化順序表
void SLDestroy(SL* psl);//摧毀順序表

void SLPrint(SL* psl);//打印順序表
void SLCheckCapacity(SL* psl);//檢測(cè)順序表的容量

// 頭尾插入刪除
void SLPushBack(SL* psl, SLDataType x);//尾插
void SLPushFront(SL* psl, SLDataType x);//頭插
void SLPopBack(SL* psl);//尾刪
void SLPopFront(SL* psl);//頭刪

// 任意下標(biāo)位置的插入刪除
void SLInsert(SL* psl, int pos, SLDataType x);//任意下標(biāo)插
void SLErase(SL* psl, int pos);//任意下標(biāo)刪

// 找到返回下標(biāo)
// 沒(méi)有找到返回-1
int SLFind(SL* psl, SLDataType x);

3.2 各功能函數(shù)

3.2.1 初始化順序表

void SLInit(SL* psl)
{
	assert(psl);
	psl->a = NULL;
	psl->size = 0;
	psl->capacity = 0;
}

3.2.2 摧毀順序表

void SLDestroy(SL* psl)
{
	assert(psl);
	if (psl->a != NULL)
	{
		free(psl->a);
		psl->a = NULL;
		psl->size = 0;
		psl->capacity = 0;
	}
}

3.2.3 打印順序表

void SLPrint(SL* psl)
{
	assert(psl);
	for (int i = 0; i < psl->size; i++)
	{
		printf("%d ", psl->a[i]);
	}
	printf("\n");
}

3.2.4 檢測(cè)順序表的容量

void SLCheckCapacity(SL* psl)
{
	assert(psl);
	if (psl->size == psl->capacity)
	{
		int newCapacity = psl->capacity == 0 ? 4 : psl->capacity * 2;
		SLDataType* tmp = (SLDataType*)realloc(psl->a, sizeof(SLDataType) * newCapacity);
		if (tmp == NULL)
		{
			perror("realloc fail");
			return;
		}
		psl->a = tmp;
		psl->capacity = newCapacity;
	}
}

3.2.5 在順序表尾部插入元素

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

3.2.6 在順序表頭部插入元素

void SLPushFront(SL* psl, SLDataType x)
{
	assert(psl);
	SLCheckCapacity(psl);
	// 挪動(dòng)數(shù)據(jù)
	int end = psl->size - 1;
	while (end >= 0)
	{
		psl->a[end + 1] = psl->a[end];
		--end;
	}
	psl->a[0] = x;
	psl->size++;
}

3.2.7 在順序表尾部刪除元素

void SLPopBack(SL* psl)
{
	assert(psl);
	assert(psl->size > 0);
	psl->size--;
}

3.2.8 在順序表頭部刪除元素

void SLPopFront(SL* psl)
{
	assert(psl);
	assert(psl->size > 0);
	int begin = 1;
	while (begin < psl->size)
	{
		psl->a[begin - 1] = psl->a[begin];
		++begin;
	}
	psl->size--;
}

3.2.9 在順序表任意處插入元素

void SLInsert(SL* psl, int pos, SLDataType x)
{
	assert(psl);
	assert(pos >= 0 && pos <= psl->size);
	SLCheckCapacity(psl);
	// 挪動(dòng)數(shù)據(jù)
	int end = psl->size - 1;
	while (end >= pos)
	{
		psl->a[end + 1] = psl->a[end];
		--end;
	}
	psl->a[pos] = x;
	psl->size++;
}

3.2.10 在順序表任意處刪除元素

void SLErase(SL* psl, int pos)
{
	assert(psl);
	assert(pos >= 0 && pos < psl->size);
	// 挪動(dòng)覆蓋
	int begin = pos + 1;
	while (begin < psl->size)
	{
		psl->a[begin - 1] = psl->a[begin];
		++begin;
	}
	psl->size--;
}

3.2.11 查找元素

int SLFind(SL* psl, SLDataType x)
{
	assert(psl);
	for (int i = 0; i < psl->size; i++)
	{
		if (psl->a[i] == x)
		{
			return i;
		}
	}
	return -1;
}

3.2.12 主函數(shù)

主函數(shù)包括目錄及各個(gè)功能的測(cè)試。完整代碼見(jiàn)3.2.13 gitee

3.2.13 完整代碼

鏈接: 動(dòng)態(tài)順序表完整代碼:gitee

4.順序表的缺陷

1.尾部插入效率尚可,頭部或者中間插入刪除,需要挪動(dòng)數(shù)據(jù),效率低下。
2.容量滿了之后只能擴(kuò)容。擴(kuò)容是有一定的消耗,且存在一定的空間浪費(fèi)。(假設(shè)空間為100,擴(kuò)容到200,但只需要120個(gè)數(shù)據(jù),會(huì)有大量空間浪費(fèi))文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-730339.html

到了這里,關(guān)于C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)-----順序表(多功能動(dòng)態(tài)順序表的代碼實(shí)現(xiàn))的文章就介紹完了。如果您還想了解更多內(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)-順序表各項(xiàng)功能的實(shí)現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)-順序表各項(xiàng)功能的實(shí)現(xiàn)

    線性表是n個(gè)具有相同屬性的有限數(shù)列,常見(jiàn)的線性表有:= 順序表,鏈表,棧,隊(duì)列,字符串… 線性表在邏輯上是線性結(jié)構(gòu),也就是說(shuō)連成一條直線,但是在物理結(jié)構(gòu)上不一定連續(xù),線性表在物理上存儲(chǔ)是,通常以數(shù)組和鏈?zhǔn)浇Y(jié)構(gòu)的形式進(jìn)行存儲(chǔ)。 本章,我們將通過(guò)順序表

    2024年02月14日
    瀏覽(14)
  • 消防多功能智慧燈桿

    消防多功能智慧燈桿

    消防多功能智慧燈桿是一種基于叁仟智慧桿并應(yīng)用了智能技術(shù)和物聯(lián)網(wǎng)技術(shù)的新一代消防基礎(chǔ)設(shè)備。它能夠?qū)崟r(shí)監(jiān)測(cè)消防設(shè)備的狀態(tài)和消防物資的儲(chǔ)備情況,并能夠自動(dòng)報(bào)警和調(diào)度消防人員。消防多功能智慧燈桿通常配備有各類消防設(shè)備,如滅火器、消防栓、AED、防護(hù)服等,

    2024年01月25日
    瀏覽(31)
  • 【FPGA】多功能ALU

    【FPGA】多功能ALU

    目錄 一、實(shí)驗(yàn)要求 二、源代碼 1. 頂層模塊 2. 數(shù)據(jù)輸入模塊 3. ALU運(yùn)算模塊 4. 結(jié)果處理模塊 5. 掃描數(shù)碼管模塊 5.1 掃描數(shù)碼管頂層 5.2 分頻器 5.3 數(shù)碼管顯示 三、仿真代碼 四、結(jié)構(gòu)層圖 五、管腳配置 實(shí)驗(yàn)板卡:xc7a100tlc sg324-2L,共20個(gè)開(kāi)關(guān) 通過(guò)高低位控制,實(shí)現(xiàn)32位數(shù)據(jù)A、

    2024年02月02日
    瀏覽(23)
  • 多功能隱寫融合

    多功能隱寫融合

    ??????? 最近嘗試了一個(gè)融合了多功能隱寫的項(xiàng)目,參考了一些現(xiàn)有的資料和相關(guān)的開(kāi)源庫(kù),并最終集成到了可視化UI當(dāng)中。這篇文章講述了實(shí)現(xiàn)的幾項(xiàng)隱寫技術(shù)的原理以及最終呈現(xiàn)的效果,后續(xù)會(huì)在“ 隱私保護(hù) ”以及“ ui ”的專欄中繼續(xù)更新詳細(xì)的ui設(shè)計(jì)思路以及隱寫代

    2024年01月19日
    瀏覽(26)
  • 實(shí)戰(zhàn)項(xiàng)目——多功能電子時(shí)鐘

    實(shí)戰(zhàn)項(xiàng)目——多功能電子時(shí)鐘

    通過(guò)按鍵來(lái)控制狀態(tài)機(jī)的狀態(tài),在將狀態(tài)值傳送到各個(gè)模塊進(jìn)行驅(qū)動(dòng),在空閑狀態(tài)下,數(shù)碼管顯示基礎(chǔ)時(shí)鐘,基礎(chǔ)時(shí)鐘是由7個(gè)計(jì)數(shù)器組合而成,當(dāng)在ADJUST狀態(tài)下可以調(diào)整時(shí)間,并且基礎(chǔ)時(shí)間會(huì)隨基礎(chǔ)時(shí)鐘的改變而改變,同過(guò)位置使能來(lái)確定更改的值在按下確定來(lái)更改基礎(chǔ)時(shí)鐘

    2024年02月14日
    瀏覽(30)
  • 數(shù)據(jù)結(jié)構(gòu)---手撕順序表---順序表增刪查改尋找功能的實(shí)現(xiàn)

    順序表作為數(shù)據(jù)結(jié)構(gòu)的入門知識(shí),整體知識(shí)較為簡(jiǎn)單,主要對(duì)動(dòng)態(tài)內(nèi)存開(kāi)辟 結(jié)構(gòu)體 指針有要求,其余難度較低 順序表主要需要實(shí)現(xiàn)的有順序表的增刪查改和定向搜索銷毀等,具體實(shí)現(xiàn)函數(shù)如下 要實(shí)現(xiàn)順序表,就需要對(duì)順序表進(jìn)行定義,在c語(yǔ)言中通常使用結(jié)構(gòu)體進(jìn)行寫入,

    2024年02月16日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu):手撕順序表---順序表增刪查改尋找功能的實(shí)現(xiàn)

    順序表作為數(shù)據(jù)結(jié)構(gòu)的入門知識(shí),整體知識(shí)較為簡(jiǎn)單,主要對(duì)動(dòng)態(tài)內(nèi)存開(kāi)辟 結(jié)構(gòu)體 指針有要求,其余難度較低 順序表主要需要實(shí)現(xiàn)的有順序表的增刪查改和定向搜索銷毀等,具體實(shí)現(xiàn)函數(shù)如下 要實(shí)現(xiàn)順序表,就需要對(duì)順序表進(jìn)行定義,在c語(yǔ)言中通常使用結(jié)構(gòu)體進(jìn)行寫入,

    2024年02月15日
    瀏覽(21)
  • VHDL實(shí)現(xiàn)多功能時(shí)鐘設(shè)計(jì)

    VHDL實(shí)現(xiàn)多功能時(shí)鐘設(shè)計(jì)

    題目:多功能電子時(shí)鐘 VHDL語(yǔ)言設(shè)計(jì) 主要功能要求: 1、電子時(shí)鐘。要求用24 時(shí)制顯示。分屏顯示“時(shí)、分”和“分、秒”,即4 個(gè)數(shù)碼管不能同時(shí)顯示“時(shí)、分、秒”,但可以只顯示“時(shí)、分”,或只顯示“分、秒”,通過(guò)按鍵來(lái)切換這兩種顯示方式。用數(shù)碼管的小數(shù)點(diǎn)“

    2024年02月11日
    瀏覽(94)
  • 數(shù)據(jù)結(jié)構(gòu)——順序表(C語(yǔ)言)

    數(shù)據(jù)結(jié)構(gòu)——順序表(C語(yǔ)言)

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

    2024年02月13日
    瀏覽(37)
  • 【數(shù)據(jù)結(jié)構(gòu)<順序表>】C語(yǔ)言

    【數(shù)據(jù)結(jié)構(gòu)<順序表>】C語(yǔ)言

    線性表(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月05日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包