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

C語(yǔ)言—實(shí)現(xiàn)循序表的增刪查改

這篇具有很好參考價(jià)值的文章主要介紹了C語(yǔ)言—實(shí)現(xiàn)循序表的增刪查改。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一.正文

嗨嗨嗨!大家好!今天我為大家分享的是數(shù)據(jù)結(jié)構(gòu)知識(shí)——順序表。廢話不多數(shù),讓我們開(kāi)始今天的知識(shí)分享吧。C語(yǔ)言—實(shí)現(xiàn)循序表的增刪查改,c語(yǔ)言,算法,數(shù)據(jù)結(jié)構(gòu)

二.正文

1.1認(rèn)識(shí)數(shù)據(jù)結(jié)構(gòu)

數(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ù)據(jù)元素之間呈現(xiàn)的結(jié)構(gòu)。

1.2循序表與數(shù)組之間的關(guān)系

其實(shí)數(shù)組就是最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)就是對(duì)數(shù)據(jù)進(jìn)行有效的管理。你可能有疑問(wèn)了?“既然我們有了數(shù)組為什么還要循序表呢?”

數(shù)組和順序表雖然在存儲(chǔ)結(jié)構(gòu)上相似,但它們?cè)诟拍顚用妗㈧`活性以及應(yīng)用場(chǎng)景上有所不同。具體分析如下:

1. 概念層面:數(shù)組是編程語(yǔ)言中的一種數(shù)據(jù)類(lèi)型,用于存儲(chǔ)固定數(shù)量的同類(lèi)型元素,而順序表是一種數(shù)據(jù)結(jié)構(gòu),它強(qiáng)調(diào)的是元素之間“一對(duì)一”的邏輯關(guān)系。順序表不僅可以存儲(chǔ)數(shù)據(jù),還可以表達(dá)數(shù)據(jù)之間的邏輯順序,這是數(shù)組所不具備的。
2. 靈活性:數(shù)組的大小在聲明時(shí)就已經(jīng)確定,無(wú)法動(dòng)態(tài)改變,而順序表作為一種數(shù)據(jù)結(jié)構(gòu),可以根據(jù)需要?jiǎng)討B(tài)地增加或減少元素,這在處理不確定數(shù)量的數(shù)據(jù)時(shí)更加靈活。
3. 應(yīng)用場(chǎng)景:數(shù)組適用于那些元素?cái)?shù)量固定且需要頻繁訪問(wèn)的情況,如用于實(shí)現(xiàn)簡(jiǎn)單的查找和排序算法。順序表則更適用于需要頻繁插入和刪除操作的場(chǎng)景,因?yàn)樗梢员3謹(jǐn)?shù)據(jù)的有序性并且能夠快速地調(diào)整存儲(chǔ)空間。

總的來(lái)說(shuō),盡管數(shù)組可以作為順序表的一種實(shí)現(xiàn)方式,但順序表作為一種數(shù)據(jù)結(jié)構(gòu),其設(shè)計(jì)和使用都是為了解決更加復(fù)雜的數(shù)據(jù)組織和處理問(wèn)題。在實(shí)際應(yīng)用中,選擇使用數(shù)組還是順序表,取決于具體的應(yīng)用需求和場(chǎng)景。?

2.1循序表的概念

循序表是線性表的一種。本質(zhì)是基于數(shù)組對(duì)數(shù)據(jù)進(jìn)行增刪查改等操作的。

2.2線性表

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

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

案例:蔬菜分為綠葉類(lèi)、瓜類(lèi)、菌菇類(lèi)。線性表指的是具有部分相同特性的一類(lèi)數(shù)據(jù)結(jié)構(gòu)的集合

2.3順序表的實(shí)現(xiàn)

在這里為大家?guī)?lái)的循序表實(shí)現(xiàn)了對(duì)于數(shù)組元素實(shí)現(xiàn)增刪查改這四個(gè)功能(同學(xué)們可以自行補(bǔ)充功能)

在這里我們實(shí)現(xiàn)該循序表采用了多文件形式。

分為頭文件SeqList.h和源文件SeqList.c和test.c。

SeqList.h:實(shí)現(xiàn)我們使用各個(gè)函數(shù)過(guò)程中的聲明。

SeqList.c:實(shí)現(xiàn)各個(gè)函數(shù)的實(shí)現(xiàn)。

test.c:當(dāng)我們實(shí)現(xiàn)一個(gè)功能或函數(shù)的時(shí)候,在該文件中進(jìn)行測(cè)試,測(cè)試所寫(xiě)函數(shù)是否正常運(yùn)行。

廢話不多數(shù)直接上代碼:

SeqList.h

#pragma once
//#define SLDateType int
typedef int SLDateType;
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef struct SeqList
{
	SLDateType* arr;
	int size;
	int capacity;
}SL;
void SLInit();//循序表的初始化
void SLDestroy();//順序表的銷(xiāo)毀
void SLPushBack();//尾部插入
void SLPushFront();//頭部插入
void SLPopBack();//尾部刪除
void SLPopFront();//頭部刪除
void SLInsert();//指定位置插入
void SLErase();//指定位置刪除
int SLFind();//查找數(shù)據(jù)

SeqList.c:

#include"SeqList.h"
void SLInit(SL*ps)//循序表的初始化函數(shù)的實(shí)現(xiàn)
{
	ps->arr = NULL;
	ps->size = ps->capacity = 0;
}
void SLDestroy(SL* ps)//順序表銷(xiāo)毀的函數(shù)實(shí)現(xiàn)
{
	if ((ps->arr) != NULL)
	{
		free(ps->arr);
	}
	ps->arr = NULL;
	ps->size = ps->capacity = 0;
}
void SLCheckCapacity(SL*ps)
{
	if (ps->capacity == ps->size)
	{
		int NewCapacity = ps->capacity == 0 ? 6 : 2 * ps->capacity;
		SLDateType* tmp =(SLDateType*) realloc(ps->arr, NewCapacity * sizeof(SLDateType));
		if (tmp ==NULL)
		{
			perror("realloc faile!");
			return 1;
		}
		ps->arr= tmp;
		ps->capacity = NewCapacity;
	}

}
void SLPrint(SL* ps)
{
	for (int i = 0; i < ps->size; i++)
	{
		printf("%d ", ps->arr[i]);
	}
	printf("\n");
}
//void SLPrint(SL s)
//{
//	for (int i = 0; i <s .size; i++)
//	{
//		printf("%d ", s.arr[i]);
//	}
//	printf("\n");
//}
void SLPushBack(SL*ps,SLDateType x)//尾插函數(shù)的實(shí)現(xiàn)
{
	assert(ps);
	SLCheckCapacity(ps);
	ps->arr[ps->size] = x;
	ps->size++;
}
void SLPushFront(SL*ps,SLDateType x)//頭插函數(shù)的實(shí)現(xiàn)
{
	assert(ps);
	SLCheckCapacity(ps);
	for (int i =ps-> size; i>0; i--)
	{
		ps->arr[i] = ps->arr[i - 1];
	}
	ps->arr[0] = x;
	ps->size++;
}
void SLPopBack(SL*ps)//頭刪函數(shù)的實(shí)現(xiàn)
{
	assert(ps);
	assert(ps->size);
	ps->size--;
}
void SLPopFront(SL* ps)//尾刪函數(shù)的實(shí)現(xiàn)
{
	for (int i = 0; i <(ps->size)-1 ; i++)
	{
		ps->arr[i] = ps->arr[i + 1];
	}
	ps->size--;
}
void SLInsert(SL*ps,int pos,SLDateType x)//指定位置的插入
{
	assert(ps);
	assert(pos >= 0 && pos <= ps->size);
	SLCheckCapacity(ps);
	for (int i = ps->size; i >=pos+1; i--)
	{
		ps->arr[i] = ps->arr[i- 1];
	}
	ps->arr[pos] = x;
	ps->size++;
}
void SLErase(SL*ps,int pos)
{
	assert(ps);
	assert(pos >= 0 && pos < ps->size);
	for (int i = pos; i <= ps->size - 2; i++)
	{
		ps->arr[i] = ps->arr[i+1];
	}
	ps->size--;
}
int SLFind(SL* ps, SLDateType x)
{
	assert(ps);
	for (int i = 0; i <ps-> size; i++)
	{
		if (ps->arr[i] ==x)
		{
			return i;
		}
	}
	return -1;
}

tes.c:

#include"SeqList.h"
int main()
{
	SL sl;
	SLInit(&sl);
	SLPushBack(&sl, 0);
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	//SLPushFront(&sl, 3);
//	SLPushFront(&sl, 4);
	//SLPopBack(&sl);
//	SLPopFront(&sl);
  // SLInsert(&sl, 3, 99);
	//SLErase(&sl, 1);
	SLFind(&sl, 2);
	SLPrint(&sl);
	int find = SLFind(&sl, 2);
	if (find < 0)
	{
		printf("沒(méi)有找到\n");
	}
	else
	{
		printf("找到了,該數(shù)據(jù)下標(biāo)是%d\n", find);
	}
	return 0;
}

上面test.c代碼是本人自己在測(cè)試功能的時(shí)候用的,同學(xué)們自己根據(jù)實(shí)際需求測(cè)試自己的代碼即可。

三.結(jié)言

今天的知識(shí)分享就到此結(jié)束了。咱們下次再見(jiàn)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-852106.html

到了這里,關(guān)于C語(yǔ)言—實(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)】雙向鏈表的增刪查改(C 代碼實(shí)現(xiàn))

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

    引入雙向鏈表:關(guān)于單鏈表的問(wèn)題與討論 單鏈表存在的毛?。?因?yàn)閱捂湵?只能單向 遍歷鏈表, 對(duì)于 前插 這個(gè)操作,單鏈表必 須得找到所需前插節(jié)點(diǎn)位置的前一個(gè) ,那么這時(shí)就得 從頭指針重新遍歷一次 鏈表,會(huì)造成時(shí)間復(fù)雜度大大增加。 沒(méi)有頭節(jié)點(diǎn)(哨兵位)無(wú)法刪除

    2024年02月08日
    瀏覽(99)
  • 數(shù)據(jù)結(jié)構(gòu)之順序表的增刪查改

    數(shù)據(jù)結(jié)構(gòu)之順序表的增刪查改

    自今日起,我們正式 越過(guò)C語(yǔ)言的大山 ,走向了 數(shù)據(jù)結(jié)構(gòu)的深山 ,現(xiàn)如今擺在我們面前的第一個(gè)坎就是 順序表 ,我們需要了解順序表的 定義 ,并且知道,如何對(duì)其進(jìn)行 增刪查改 ,之后我們需要在此處基礎(chǔ)上寫(xiě)出一份 通訊錄代碼 ,ok,順序表,啟動(dòng)! 線性表( linear lis

    2024年01月23日
    瀏覽(32)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表:帶頭雙向循環(huán)鏈表的增刪查改

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

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

    2024年02月05日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu).C】順序表和單鏈表的增刪查改

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

    寶子,你不點(diǎn)個(gè)贊嗎?不評(píng)個(gè)論嗎?不收個(gè)藏嗎? 最后的最后,關(guān)注我,關(guān)注我,關(guān)注我,你會(huì)看到更多有趣的博客哦?。?! 喵喵喵,你對(duì)我真的很重要。 目錄 單鏈表增刪查改 c1.h sqlist.c number.c 單鏈表的增刪查改 ?c1.h stuscore.c c1.h sqlist.c number.c ?c1.h stuscore.c ? 寶子,你不點(diǎn)

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

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

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

    2024年02月05日
    瀏覽(26)
  • MySQL——表的增刪查改

    MySQL——表的增刪查改

    目錄 一.Create(創(chuàng)建) 1.單行數(shù)據(jù) + 全列插入 2.多行數(shù)據(jù) + 指定列插入 3.插入否則更新 4.?替換 二.Retrieve(讀?。?1. select 列 查詢 2.where 條件 3.結(jié)果排序 4.篩選分頁(yè)結(jié)果 三.Update (修改) 四.Delete(刪除) 1.刪除數(shù)據(jù) 2.刪除整張表數(shù)據(jù) 3.截?cái)啾?4.去重表數(shù)據(jù) 五.聚合函數(shù) 六.g

    2024年02月04日
    瀏覽(22)
  • 【MySql】表的增刪查改

    【MySql】表的增刪查改

    說(shuō)明: field 表示列名 datatype 表示列的類(lèi)型 character set 字符集,如果沒(méi)有指定字符集,則以所在數(shù)據(jù)庫(kù)的字符集為準(zhǔn) collate 校驗(yàn)規(guī)則,如果沒(méi)有指定校驗(yàn)規(guī)則,則以所在數(shù)據(jù)庫(kù)的校驗(yàn)規(guī)則為準(zhǔn) 現(xiàn)在創(chuàng)建一張表user1: 創(chuàng)建表user2: 存儲(chǔ)引擎不同,此時(shí)我們查看user1和user2:建表的時(shí)候

    2024年02月08日
    瀏覽(23)
  • 【MySQL】表的增刪查改(進(jìn)階)

    目錄 1.數(shù)據(jù)庫(kù)約束 1.1NOT NULL:非空約束 1.2UNIQUE:唯一值約束 1.3DEFAULT:默認(rèn)值約束 1.4PRIMARY KEY:主鍵約束 1.5FOREIGN KEY:外鍵約束 1.6CHECK約束 2.表的設(shè)計(jì) 2.1一對(duì)一 2.2一對(duì)多 2.3多對(duì)多 3.新增 4.查詢 4.1聚合查詢 4.1.1聚合查詢 4.1.2GROUP BY 4.2聯(lián)合查詢 4.2.1內(nèi)連接? 4.2.2外連接 4.2.3自連

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

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

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

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

    2024年02月16日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包