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

數(shù)據(jù)結構:手撕順序表---順序表增刪查改尋找功能的實現(xiàn)

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結構:手撕順序表---順序表增刪查改尋找功能的實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


順序表前言

順序表作為數(shù)據(jù)結構的入門知識,整體知識較為簡單,主要對動態(tài)內存開辟 結構體 指針有要求,其余難度較低


順序表要實現(xiàn)的功能

順序表主要需要實現(xiàn)的有順序表的增刪查改和定向搜索銷毀等,具體實現(xiàn)函數(shù)如下

// 對數(shù)據(jù)的管理:增刪查改 
void SeqListInit(SeqList* ps);
void SeqListDestroy(SeqList* ps);

void SeqListPrint(SeqList* ps);
void SeqListPushBack(SeqList* ps, SLDateType x);
void SeqListPushFront(SeqList* ps, SLDateType x);
void SeqListPopFront(SeqList* ps);
void SeqListPopBack(SeqList* ps);

// 順序表查找
int SeqListFind(SeqList* ps, SLDateType x);
// 順序表在pos位置插入x
void SeqListInsert(SeqList* ps, int pos, SLDateType x);
// 順序表刪除pos位置的值
void SeqListErase(SeqList* ps, int pos);

定義順序表

要實現(xiàn)順序表,就需要對順序表進行定義,在c語言中通常使用結構體進行寫入,包括順序表的容量,順序表中存在元素的個數(shù),順序表的主體

在對順序表的定義中存在兩種,如果不使用動態(tài)內存開辟,可以直接定義一個數(shù)組實現(xiàn)順序表,但由于數(shù)組容量是固定的,會把整個順序表固定大小,于是在這里采用動態(tài)內存開辟的方法實現(xiàn)順序表

首先對順序表進行定義

typedef int SLDateType;
typedef struct SeqList
{
	SLDateType* a;
	int size;
	int capacity;
}SeqList;

接下來我們就對順序表的各項功能進行依次實現(xiàn)


順序表初始化

把順序表的結構體定義完成后就可以創(chuàng)建一個順序表了,創(chuàng)建好初始值后就要對順序表進行一定的初始化內容

代碼實現(xiàn)如下

void SeqListInit(SeqList* ps)
{
	assert(ps);
	ps->a = (SLDateType*)malloc(sizeof(SLDateType) * 4);
	if (ps->a == NULL)
	{
		perror("malloc fail");
		return;
	}
	ps->size = 0;
	ps->capacity = 4;
}

關于assert函數(shù)

assert的作用是斷言,主要是用來進行條件判斷,例如這里檢測ps,意思就是檢測ps是否為空指針,如果ps是空指針后續(xù)的操作就不必而行了,這樣有利于檢查錯誤信息,當運行到該語句結論為假時,會直接終止代碼,算是暴力檢查的一種方法


順序表的銷毀

創(chuàng)建完順序表后就要對順序表進行銷毀,銷毀的就是把它對應的空間釋放,置空指針,返回初始值

代碼實現(xiàn)如下

void SeqListDestroy(SeqList* ps)
{
	assert(ps);
	free(ps->a);
	ps->a = NULL;
	ps->size = 0;
	ps->capacity = 0;
}

關于置空指針

一般來說,把相關空間釋放后為了避免出現(xiàn)野指針的情況要把指針置空,但不進行指針的置空在一些情況下也是可以的,一般釋放空間后都會緊跟置空指針


打印順序表

將順序表里的信息打印到屏幕上,進行可視化觀察有無錯誤信息

代碼實現(xiàn)如下

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

順序表的尾插

將一個數(shù)據(jù)插入到順序表中就涉及到了順序表的尾插

思路也很簡單,首先看原來順序表的容量是否滿足要求,如果不滿足就進行一定的擴容,再把要插入的數(shù)據(jù)放到順序表的尾部即可

如何實現(xiàn)檢查容量?

如果順序表的size和capacity是一致的,說明已經(jīng)滿了,到達上限了

因此函數(shù)實現(xiàn)如下

void SLCheckCapacity(SeqList* ps)
{
	assert(ps);
	SLDateType* tmp = NULL;
	if (ps->capacity == ps->size)
	{
		tmp = (SLDateType*)realloc(ps->a, sizeof(SLDateType) * ps->capacity * 2);
		if (tmp == NULL)
		{
			perror("realloc fail");
			return;
		}
		ps->a = tmp;
		ps->capacity *= 2;
		printf("擴容成功 當前容量%d\n", ps->capacity);
	}
}

但是由于后續(xù)還有再規(guī)定位置插入元素的情況,我們可以直接先寫在x位置插入元素的情況

因此函數(shù)實現(xiàn)就變成了實現(xiàn)在x位置插入元素

函數(shù)實現(xiàn)如下

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

有了在x位置插入元素函數(shù)的實現(xiàn),對于在尾部插入函數(shù)只需要將x換成size即可

void SeqListPushBack(SeqList* ps, SLDateType x)
{
	assert(ps);
	SeqListInsert(ps,ps->size,x);
}

順序表的頭插

和順序表的尾插相似,當我們有了在x位置插入元素的函數(shù)時,這些需求就很好寫了

void SeqListPushFront(SeqList* ps, SLDateType x)
{
	assert(ps);
	SeqListInsert(ps, 0, x);
}

順序表的頭刪

有了前面的想法,我們也把在x位置的元素進行刪除封裝成一個函數(shù)

函數(shù)實現(xiàn)如下

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

那么頭刪就是把標號為0的元素刪除

具體函數(shù)實現(xiàn)如下

void SeqListPopFront(SeqList* ps)
{
	assert(ps);
	SeqListErase(ps, 0);
}

順序表的尾刪

有了頭刪的想法,尾刪和頭刪基本一致

void SeqListPopBack(SeqList* ps)
{
	assert(ps);
	int end = ps->size - 1;
	SeqListErase(ps, end);
}

順序表定向位置查找

最簡單的功能,只需要遍歷順序表即可

int SeqListFind(SeqList* ps, SLDateType x)
{
	assert(ps);
	for(int i=0;i<ps->size;i++)
	{
		if (ps->a[i] == x)
			return i;
	}
	return -1;
}

整體來說順序表是數(shù)據(jù)結構入門的部分,難度偏低文章來源地址http://www.zghlxwxcb.cn/news/detail-612796.html

到了這里,關于數(shù)據(jù)結構:手撕順序表---順序表增刪查改尋找功能的實現(xiàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關文章

  • 【數(shù)據(jù)結構.C】順序表和單鏈表的增刪查改

    【數(shù)據(jù)結構.C】順序表和單鏈表的增刪查改

    寶子,你不點個贊嗎?不評個論嗎?不收個藏嗎? 最后的最后,關注我,關注我,關注我,你會看到更多有趣的博客哦!?。?喵喵喵,你對我真的很重要。 目錄 單鏈表增刪查改 c1.h sqlist.c number.c 單鏈表的增刪查改 ?c1.h stuscore.c c1.h sqlist.c number.c ?c1.h stuscore.c ? 寶子,你不點

    2024年02月11日
    瀏覽(91)
  • 詳解初階數(shù)據(jù)結構之順序表(SeqList)——單文件文件實現(xiàn)SeqList的增刪查改

    詳解初階數(shù)據(jù)結構之順序表(SeqList)——單文件文件實現(xiàn)SeqList的增刪查改

    目錄 一、線性表 二、順序表 2.1概念及結構 2.2接口實現(xiàn) 2.3動態(tài)順序表的創(chuàng)建 2.3動態(tài)順序表的初始化 2.3.1傳值初始化 2.3.2傳址初始化 2.4動態(tài)順序表的清空 2.5動態(tài)順序表的擴容 2.6動態(tài)順序表內容的打印 三、動態(tài)順序表的使用 3.1尾插尾刪 3.1.1尾插 3.1.2尾刪 3.2頭插頭刪 3.2.1頭插

    2024年02月09日
    瀏覽(23)
  • 【數(shù)據(jù)結構】單鏈表的增刪查改(C實現(xiàn))

    【數(shù)據(jù)結構】單鏈表的增刪查改(C實現(xiàn))

    優(yōu)勢 : 可通過 下標i (數(shù)據(jù)連續(xù)(物理空間連續(xù))) 便捷查詢查找順序表中的信息,也會在后面的 排序算法 和 堆算法 中盡顯身手 問題 : 在頭部/中間的插入與刪除需要 挪動數(shù)據(jù) ,時間復雜度為O(N),效率低; 增容需要申請新空間, 可能會拷貝數(shù)據(jù) ,釋放舊空間,會有

    2024年02月05日
    瀏覽(94)
  • 【數(shù)據(jù)結構】鏈表:帶頭雙向循環(huán)鏈表的增刪查改

    【數(shù)據(jù)結構】鏈表:帶頭雙向循環(huán)鏈表的增刪查改

    本篇要分享的內容是帶頭雙向鏈表,以下為本片目錄 目錄 一、鏈表的所有結構 二、帶頭雙向鏈表 2.1尾部插入 2.2哨兵位的初始化 2.3頭部插入 2.4 打印鏈表 2.5尾部刪除 2.6頭部刪除 ?2.7查找結點 2.8任意位置插入 2.9任意位置刪除? 在剛開始接觸鏈表的時候,我們所學僅僅所學的

    2024年02月05日
    瀏覽(29)
  • 【數(shù)據(jù)結構】單鏈表的增刪查改(C語言實現(xiàn))

    【數(shù)據(jù)結構】單鏈表的增刪查改(C語言實現(xiàn))

    在上一節(jié)中我們提到了順序表有如下缺陷: 在頭部/中間的插入與刪除需要挪動數(shù)據(jù),時間復雜度為O(N),效率低; 增容需要申請新空間,可能會拷貝數(shù)據(jù),釋放舊空間,會有不小的消耗; 增容一般是呈2倍的增長,勢必會有一定的空間浪費。例如當前容量為100,滿了以后增容

    2024年02月06日
    瀏覽(89)
  • 【數(shù)據(jù)結構與算法】單鏈表的增刪查改(附源碼)

    【數(shù)據(jù)結構與算法】單鏈表的增刪查改(附源碼)

    ? 這么可愛的貓貓不值得點個贊嗎 ???? 目錄 一.鏈表的概念和結構 二.單鏈表的邏輯結構和物理結構 1.邏輯結構 ?2.物理結構 三.結構體的定義 四.增加 1.尾插? ?SListpushback 2.頭插? SListpushfront 五.刪除 1.尾刪? SListpopback 2.頭刪? SListpopfront 六.查找? 插入? 釋放? ?打印 1.查找

    2024年02月02日
    瀏覽(89)
  • 【數(shù)據(jù)結構】雙向鏈表的增刪查改(C 代碼實現(xiàn))

    【數(shù)據(jù)結構】雙向鏈表的增刪查改(C 代碼實現(xiàn))

    引入雙向鏈表:關于單鏈表的問題與討論 單鏈表存在的毛?。?因為單鏈表 只能單向 遍歷鏈表, 對于 前插 這個操作,單鏈表必 須得找到所需前插節(jié)點位置的前一個 ,那么這時就得 從頭指針重新遍歷一次 鏈表,會造成時間復雜度大大增加。 沒有頭節(jié)點(哨兵位)無法刪除

    2024年02月08日
    瀏覽(99)
  • 【數(shù)據(jù)結構】單向鏈表的增刪查改以及指定pos位置的插入刪除

    【數(shù)據(jù)結構】單向鏈表的增刪查改以及指定pos位置的插入刪除

    目錄 ?單向鏈表的概念及結構 ?尾插 頭插 尾刪 ?編輯 ?頭刪 ?查找 ?在pos位置前插 ?在pos位置后插 ?刪除pos位置 ?刪除pos的后一個位置 總結 代碼? 概念:鏈表是一種 物理存儲結構上非連續(xù) 、非順序的存儲結構,數(shù)據(jù)元素的 邏輯順序 是通過鏈表中的 指針鏈接 次序實現(xiàn)的

    2024年02月05日
    瀏覽(26)
  • 數(shù)據(jù)結構之——(手撕)順序表

    數(shù)據(jù)結構之——(手撕)順序表

    本章會介紹的知識點如下圖: ? ? ? ? ? ? ? ? ? ?順序表的結構:邏輯結構與物理結構都是內存中一塊連續(xù)開辟的空間,都是11對應的線性結構。 兩種定義順序表的方式代碼如下 ? ? ? ? 靜態(tài)的順序表???????? 動態(tài)的順序表: ???????? 在這兩種結構中通常我們是會

    2024年02月11日
    瀏覽(30)
  • 【數(shù)據(jù)結構】手撕順序表

    【數(shù)據(jù)結構】手撕順序表

    順序表是用一段物理地址連續(xù)的存儲單元依次存儲數(shù)據(jù)元素的線性結構,一般情況下采用數(shù)組存儲; 在數(shù)組上完成數(shù)據(jù)的增刪查改。 ?1,? 靜態(tài)順序表 :使用 定長數(shù)組 存儲元素。 2., 動態(tài)順序表 :使用 動態(tài)開辟 的數(shù)組存儲。 ? 靜態(tài)順序表只適用于確定知道需要存多少數(shù)

    2024年02月11日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包