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

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

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

1.線性表

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

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

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

數(shù)據(jù)結(jié)構(gòu)——順序表(C語言),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c語言,開發(fā)語言,經(jīng)驗(yàn)分享,程序人生,c++

?

數(shù)據(jù)結(jié)構(gòu)——順序表(C語言),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c語言,開發(fā)語言,經(jīng)驗(yàn)分享,程序人生,c++

目錄

1.線性表

?2.順序表

順序表的初始化:

?順序表的擴(kuò)容:

?順序表的尾插:

順序表的頭插:?

順序表的尾刪:

順序表的頭刪:?

順序表的最后處理:

?順序表的指定位置插入:?

?順序表的指定位置刪除:?


?

?2.順序表

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

在這里,我將給大家講動(dòng)態(tài)順序表是怎么實(shí)現(xiàn)的。

?

?

(1).我先定義了一個(gè)結(jié)構(gòu)體,因?yàn)轫樞虮硎蔷哂邢嗤匦缘臄?shù)據(jù)元素的有限列表。所以我用SeqListDateType來typedef 了,這樣我們?nèi)绻莇ouble 或者float這樣的類型的話,我們就只用改變宏這里一處。

(2).因?yàn)槭莿?dòng)態(tài)的,所以我就用指針,size就代表了順序表中有多少個(gè)元素,capacity代表了是有多少的空間。


#define SeqListDateType int

typedef struct SeqList
{
	SeqListDateType* arr;
	int size;
	int capacity;
}SeqList;

?


順序表的初始化:

第一個(gè)函數(shù)就是度順序表的初始化,這里我是直接把ps->arr置位了NULL,size和capacity一開始是0。


void SeqListInit(SeqList* ps)
{
	ps->arr = NULL;
	ps->size = ps->capacity = 0;
}

?順序表的擴(kuò)容:

因?yàn)槲覀兪菍?shí)現(xiàn)動(dòng)態(tài)的順序表,所以我們要處理一下,當(dāng)size和capacity相等的時(shí)候,有2種情況,一種情況:一開始為0的時(shí)候,第二種情況:當(dāng)空間不夠的時(shí)候

這里,我用三目來實(shí)現(xiàn)了,如果是一開始我就給了4個(gè)int大小的空間,如果是第二種情況的話我就用擴(kuò)二倍的思想來處理。

void SeqListCheckCapacity(SeqList* ps)
{
	if (ps->size == ps->capacity)
	{
		int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
		SeqListDateType* tmp = (SeqListDateType*)realloc(ps->arr, newcapacity*sizeof(SeqListDateType)*2);
		if (tmp == NULL)
		{
			perror("realloc fail\n");
			exit(-1);
		}
		ps->capacity = newcapacity;
		ps->arr = tmp;
	}
}

?順序表的尾插:

一開始,我們開辟了4個(gè)int大小的空間,所以size一開始是0,然后就插入,然后size++就可以實(shí)現(xiàn)了,不過在我們插入的時(shí)候我們要考慮擴(kuò)容的問題,如果空間滿了,是要擴(kuò)容的。

數(shù)據(jù)結(jié)構(gòu)——順序表(C語言),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c語言,開發(fā)語言,經(jīng)驗(yàn)分享,程序人生,c++

?

?

void SeqListPushBack(SeqList* ps, int x)
{
	assert(ps);
	SeqListCheckCapacity(ps);
	ps->arr[ps->size] = x;
	ps->size++;
	//SeqListInsert(ps, ps->size,x);
}

?


順序表的頭插:

思路:可以用迭代的思路走,但我們想一想,如果是從前面迭代的話,就會(huì)形成對(duì)數(shù)據(jù)的覆蓋,所以要從后面迭代走。

我定義了end指向了4的位置,然后4要到后面的位置去,然后end--,這樣當(dāng)我們迭代完,順序表0的位置就空了出來,直接把數(shù)據(jù)插入進(jìn)去就可以了。

void SeqListPushFront(SeqList* ps,int x)
{
	assert(ps);
	SeqListCheckCapacity(ps);
	int end = ps->size - 1;
	while (end >=0)
	{
		ps->arr[end + 1] = ps->arr[end];
		end--;
	}
	ps->arr[0] = x;
	ps->size++;
	//SeqListInsert(ps,0,x);
}

順序表的尾刪:

順序表尾刪更簡(jiǎn)單,直接讓size--就可以實(shí)現(xiàn)了。因?yàn)?,我們打印的?shù)據(jù)就是size范圍內(nèi)的數(shù)據(jù),size減了過后就沒有這個(gè)數(shù)據(jù)了。

void SeqListPopBack(SeqList* ps)
{
	assert(ps);
	ps->size--;
	//SeqListErqse(ps, ps->size-1);
}

?


順序表的頭刪:

?

思路:先定義一個(gè)begin來指向第一個(gè)位置,我們迭代讓后面的數(shù)據(jù)覆蓋掉前面的數(shù)據(jù)就可以了。最后size--就實(shí)現(xiàn)了順序表的頭刪。

?

void SeqListPopFront(SeqList* ps)
{
	assert(ps);
	int begin = 0;
	while (begin < ps->size - 1)
	{
		ps->arr[begin] = ps->arr[begin+1];
		++begin;
	}
	ps->size--;
	//SeqListErqse(ps, 0);
}

順序表的最后處理:

我們直接free掉動(dòng)態(tài)開辟的空間就可以了,然后把size和capacity置為0.

void SeqListDestory(SeqList* ps)
{
	free(ps->arr);
	ps->arr = NULL;
	ps->size = ps->capacity = 0;
}

?我們想一個(gè)問題,如果是在面試中,給了我們10分鐘來實(shí)現(xiàn)順序表,如果這樣處理時(shí)間是不是可能不夠呢??所以,我給大家?guī)砹硗?個(gè)函數(shù),這樣我們就可以復(fù)用這2個(gè)函數(shù)對(duì)順序表的頭插、尾插..就可以直接復(fù)用,大大節(jié)約了時(shí)間。話不多說,直接放碼!??!

?順序表的指定位置插入:

?

思路:假設(shè)pos=2,我定義了end來指向最后一個(gè)元素,只需要將最后一個(gè)元素往后移動(dòng)一位,然后end--,這樣就迭代了起來,最終就可以把pos的位置空出來,然后在pos位置插入想要的元素。

?

????????

void SeqListInsert(SeqList* ps, int pos, int x)
{
	assert(pos <= ps->size && pos>=0);
	SeqListCheckCapacity(ps);
	int end = ps->size - 1;
	while (end >= pos)
	{
		ps->arr[end+1] = ps->arr[end];
		end--;
	}
	ps->arr[pos] = x;
	ps->size++;
}

?順序表的指定位置刪除:

思路:刪除的話,其實(shí)也是一個(gè)覆蓋的過程,將pos+1的位置覆蓋掉pos的位置,然后迭代,臨界位置就是size-1的時(shí)候,最后size--就實(shí)現(xiàn)了對(duì)指定位置的刪除。?

void SeqListErase(SeqList* ps, int pos)
{
	assert(pos >=0 && pos <= ps->size-1);
	int begin = pos+1;
	while (begin <= ps->size-1)
	{
		ps->arr[begin-1] = ps->arr[begin];
		begin++;
	}
	ps->size--;
}

?


這樣,就可以用這兩個(gè)元素來復(fù)用了!
尾插:尾插其實(shí)就是對(duì)順序表最后的位置插入元素(注意,在最后一個(gè)位置插入的時(shí)候size已經(jīng)++了,所以是ps->size)

SeqListInsert(ps, ps->size,x);

頭插:頭插就是對(duì)0的位置插入元素

SeqListInsert(ps,0,x);

尾刪:尾刪也是和尾插一樣的,對(duì)最后的位置刪除

SeqListErase(ps, ps->size-1);

頭刪:頭刪是對(duì)0的位置開始刪除

SeqListErase(ps, 0);

?

?

?

?

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

本文來自互聯(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)文章

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

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

    本期帶大家一起來用C語言代碼實(shí)現(xiàn)順序表?????? 順序表是一段物理地址連續(xù)的存儲(chǔ)單元,依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu)。分為靜態(tài)順序表與動(dòng)態(tài)順序表。 ?? ?? ?? 靜態(tài)順序表 :使用定長(zhǎng)數(shù)組用來存儲(chǔ)數(shù)據(jù) 優(yōu)點(diǎn) :操作簡(jiǎn)單,代碼實(shí)現(xiàn)容易 缺點(diǎn) :定長(zhǎng)數(shù)組很受限制,數(shù)

    2023年04月24日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu)(C語言)——順序表詳解

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

    數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)和組織數(shù)據(jù)的方式。常用的數(shù)據(jù)結(jié)構(gòu)有:數(shù)組(Array)、棧(Stack)、隊(duì)列(Queue)、鏈表(Linked List)、樹(Tree)、圖(Graph)、堆(Heap)等;而數(shù)據(jù)結(jié)構(gòu)又可以通過邏輯結(jié)構(gòu)與物理結(jié)構(gòu)進(jìn)行分類,邏輯結(jié)構(gòu)是指數(shù)據(jù)元素之間的邏輯關(guān)系,也就是數(shù)據(jù)元

    2024年04月16日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)|C語言版】順序表

    【數(shù)據(jù)結(jié)構(gòu)|C語言版】順序表

    各位小伙伴大家好!小編來給大家講解一下數(shù)據(jù)結(jié)構(gòu)中順序表的相關(guān)知識(shí)。 【概念】數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的?式。 數(shù)據(jù)結(jié)構(gòu)是指相互之間存在?種或多種特定關(guān)系的數(shù)據(jù)元素的集合 數(shù)據(jù)結(jié)構(gòu)反映數(shù)據(jù)的內(nèi)部構(gòu)成,即數(shù)據(jù)由那部分構(gòu)成,以什么?式構(gòu)成,以及數(shù)

    2024年04月16日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)——順序表(C語言版)

    順序表是數(shù)據(jù)結(jié)構(gòu)中最基本的一種線性表,它以一段連續(xù)的存儲(chǔ)空間來存儲(chǔ)數(shù)據(jù)元素,元素之間的順序由它們?cè)趦?nèi)存中的位置來決定。在C語言中,我們通常使用數(shù)組來實(shí)現(xiàn)順序表。 目錄 順序表的結(jié)構(gòu)定義 順序表的基本操作 應(yīng)用實(shí)例 順序表的結(jié)構(gòu)定義 首先,我們需要定義一

    2024年04月10日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)c語言版:順序表

    數(shù)據(jù)結(jié)構(gòu)c語言版:順序表

    ? ? 順序表是一種 線性數(shù)據(jù)結(jié)構(gòu) ,它由一組連續(xù)的存儲(chǔ)單元組成,用來存儲(chǔ)具有相同數(shù)據(jù)類型的元素。順序表中的元素按照邏輯順序依次存放,并且可以通過索引來訪問和修改元素。 ? ? ? ? 兩種:靜態(tài)順序表和動(dòng)態(tài)順序表。 靜態(tài)順序表: 靜態(tài)順序表使用 靜態(tài)數(shù)組 來實(shí)現(xiàn)

    2024年02月02日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】C語言實(shí)現(xiàn)順序棧

    【數(shù)據(jù)結(jié)構(gòu)】C語言實(shí)現(xiàn)順序棧

    大家好,很高興又和大家見面啦!?。?在上一個(gè)篇章中,我們介紹了棧的基本概念,以及棧中的重要術(shù)語。通過介紹我們知道了棧的本質(zhì)也是一種線性表,只不過它是一種操作受限的線性表。因此棧的實(shí)現(xiàn)方式與線性表的實(shí)現(xiàn)實(shí)際上是大同小異的。下面我們就來介紹一下如何

    2024年01月19日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序表---C語言版

    【數(shù)據(jù)結(jié)構(gòu)】順序表---C語言版

    順序表是一種常見的數(shù)據(jù)結(jié)構(gòu),今天就讓我來帶領(lǐng)大家一起學(xué)習(xí)一下吧! 不會(huì)再休息,一分一毫了,OK,let’s go! 線性表(linear list)是n個(gè)具有 相同特性的數(shù)據(jù)元素 的有限序列。 線性表是一種在實(shí)際中廣泛使 用的數(shù)據(jù)結(jié)構(gòu), 常見的線性表:順序表、鏈表、棧、隊(duì)列、字符

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

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

    ????????從本章開始就是開始數(shù)據(jù)結(jié)構(gòu)的開端,本章將會(huì)寫出數(shù)據(jù)結(jié)構(gòu)中的順序表的代碼實(shí)現(xiàn),多會(huì)以注釋的方法來描述一些細(xì)節(jié)(注釋是我們程序員必須常用的工具)。 ? ? ? ? 話不多說安全帶系好,發(fā)車?yán)玻ńㄗh電腦觀看)。 附:紅色,部分為重點(diǎn)部分;藍(lán)顏色為需

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

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

    順序表是用順序存儲(chǔ)方式存放的線性表(可以理解為數(shù)組的存儲(chǔ)方式),表中的元素在內(nèi)存中彼此相鄰。 靜態(tài)存儲(chǔ):在定義時(shí)就確定了順序表的大小,并且之后順序表的大小不會(huì)改變(即使之后空間不夠用了,也無法增加) 動(dòng)態(tài)存儲(chǔ):線性表的大小可以根據(jù)需要更改(順序

    2024年02月08日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)|C語言版】順序表應(yīng)用

    【數(shù)據(jù)結(jié)構(gòu)|C語言版】順序表應(yīng)用

    上期回顧: 【數(shù)據(jù)結(jié)構(gòu)|C語言版】順序表 個(gè)人主頁: C_GUIQU 各位小伙伴大家好!上期小編給大家講解了數(shù)據(jù)結(jié)構(gòu)中的順序表,接下來講講順序表該如何應(yīng)用。 (1)能夠保存聯(lián)系人的姓名、年齡、性別、電話、住址 (2)添加聯(lián)系人信息 (3)刪除聯(lián)系人信息 (4)修改聯(lián)系人信

    2024年04月16日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包