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

數(shù)據(jù)結(jié)構(gòu):線性表之-順序表

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

目錄

1.線性表概念

1.1 什么是順序列表

1.2 線性表

2.順序表實(shí)現(xiàn)

將有以下功能:

詳細(xì)過程

順序表的動(dòng)態(tài)存儲(chǔ)

順序表初始化

尾插

擴(kuò)容

頭插

更改后的尾插

尾刪

頭刪

打印

釋放內(nèi)存

優(yōu)化順序表 (任意位置插入刪除)

優(yōu)化后的頭插尾插

優(yōu)化后的頭刪尾刪

查找和刪除

進(jìn)行裝飾(菜單)

成品

SeqList.h

SeqList.c

Test.c:


1.線性表概念

1.1 什么是順序列表

順序列表(Sequential List)是一種使用連續(xù)的內(nèi)存空間存儲(chǔ)元素的線性數(shù)據(jù)結(jié)構(gòu)。順序列表中的元素按照其在內(nèi)存中的物理順序依次排列,同時(shí)通過索引來訪問元素。

順序列表可以使用數(shù)組來實(shí)現(xiàn),數(shù)組的下標(biāo)就是元素的索引。由于數(shù)組具有隨機(jī)訪問的特性,即可以通過索引直接訪問元素,因此順序列表在查找指定位置的元素時(shí)具有較高的效率。

順序列表的特點(diǎn)包括:

  1. 連續(xù)的內(nèi)存空間:順序列表中的元素在內(nèi)存中是連續(xù)存儲(chǔ)的,這樣可以通過索引進(jìn)行快速訪問,提高了訪問效率。

  2. 固定大小:順序列表的大小在創(chuàng)建時(shí)就確定,一旦分配了固定大小的內(nèi)存空間,就無法自動(dòng)擴(kuò)展或縮小。需要預(yù)估元素的個(gè)數(shù),以避免空間浪費(fèi)或溢出。

  3. 隨機(jī)訪問效率高:由于順序列表基于數(shù)組實(shí)現(xiàn),并支持隨機(jī)訪問,可以在O(1)的時(shí)間復(fù)雜度內(nèi)獲取指定位置的元素值。

  4. 插入和刪除的效率較低:當(dāng)需要在順序列表的中間位置插入或刪除元素時(shí),需要移動(dòng)部分元素,導(dǎo)致時(shí)間復(fù)雜度為O(n)。因此,在有頻繁的插入和刪除操作時(shí),順序列表的效率可能較低。

需要注意的是,順序列表適用于元素個(gè)數(shù)固定且隨機(jī)訪問較為頻繁的場(chǎng)景。當(dāng)需要頻繁進(jìn)行插入和刪除操作,或者元素個(gè)數(shù)不確定時(shí),可以考慮其他數(shù)據(jù)結(jié)構(gòu),如鏈表。

1.2 線性表

線性表(linear list)是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實(shí)際中廣泛使
用的數(shù)據(jù)結(jié)構(gòu),常見的線性表:順序表、鏈表、棧、隊(duì)列、字符串…
線性表在邏輯上是線性結(jié)構(gòu),也就說是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的,
線性表在物理上存儲(chǔ)時(shí),通常以數(shù)組和鏈?zhǔn)浇Y(jié)構(gòu)的形式存儲(chǔ)。

2.順序表實(shí)現(xiàn)

將有以下功能:

// 順序表的動(dòng)態(tài)存儲(chǔ)
typedef struct SeqList

// 基本增刪查改接口  
// 順序表初始化  
void SeqListInit(SeqList* psl);  
// 順序表銷毀  
void SeqListDestory(SeqList* psl);  
// 順序表打印  
void SeqListPrint(SeqList* psl);  
// 檢查空間,如果滿了,進(jìn)行增容  
void CheckCapacity(SeqList* psl);  
// 順序表尾插  
void SeqListPushBack(SeqList* psl, SLDataType x);  
// 順序表尾刪  
void SeqListPopBack(SeqList* psl);  
// 順序表頭插  
void SeqListPushFront(SeqList* psl, SLDataType x);  
// 順序表頭刪  
void SeqListPopFront(SeqList* psl);  
// 順序表查找  
int SeqListFind(SeqList* psl, SLDataType x);  
// 順序表在pos位置插入x  
void SeqListInsert(SeqList* psl, size_t pos, SLDataType x);  
// 順序表刪除pos位置的值  
void SeqListErase(SeqList* psl, size_t pos);

詳細(xì)過程

定義三個(gè)文件:
頭文件 SeqList.h
函數(shù)的實(shí)現(xiàn)SeqList.c
代碼的測(cè)試 Test.c

順序表的動(dòng)態(tài)存儲(chǔ)

//SeLqist.h
#define N 200
typedef int SLDataType;

//靜態(tài)順序表 -- N太小,可能不夠用 N太大,可能浪費(fèi)空間
//struct SeqList
//{
//	SLDataType a[N];
//	int size;
//	int capa;
//};

//動(dòng)態(tài)順序表
typedef struct SeqList
{
	SLDataType* a;// 指向數(shù)組的指針
	int size;	  // 數(shù)據(jù)個(gè)數(shù)
	int capacity;//  容量-空間大小
}SL;

順序表初始化

//SeqList.c
void SLInit(SL* ps)
{
	ps->a = NULL;
	ps->size =ps->capacity= 0;
}

尾插

void SLPushBack(SL* ps, SLDataType x)
{
	//檢查容量空間,滿了擴(kuò)容
	if (ps->capacity == ps->size)
	{
		int newCapacity = 0;
		if (ps->capacity == 0)
			newCapacity = ps->capacity = 4;
		else
			newCapacity = ps->capacity * 2;
		SLDataType* tmp = (SLDataType*)realloc(ps->a, newCapacity * sizeof(SLDataType));
		if (tmp == NULL)
		{
			printf("realloc fail\n");
			//exit(-1);
		}
		ps->a = tmp;
		ps->capacity = newCapacity;
	}
	ps->a[ps->size] = x;
	ps->size++;
}

擴(kuò)容

//動(dòng)態(tài)增容
void SLCheckCapacity(SL* ps)
{
   //檢查容量空間,滿了擴(kuò)容
   if (ps->capacity == ps->size)
   {
   	int newCapacity = 0;
   	if (ps->capacity == 0)
   		newCapacity = ps->capacity = 4;
   	else
   		newCapacity = ps->capacity * 2;
   	SLDataType* tmp = (SLDataType*)realloc(ps->a, newCapacity * sizeof(SLDataType));
   	if (tmp == NULL)
   	{
   		printf("realloc fail\n");
   		//exit(-1);
   	}
   	ps->a = tmp;
   	ps->capacity = newCapacity;
   }
}

頭插

因?yàn)槎嗵幰M(jìn)行數(shù)據(jù)擴(kuò)容,故將數(shù)據(jù)擴(kuò)容單獨(dú)用寫為一個(gè)函數(shù)

void SLPushBack(SL* ps, SLDataType x)
{
	SLCheckCapacity(ps);
	ps->a[ps->size] = x;
	ps->size++;
}
更改后的尾插
//尾插
void SLPushBack(SL* ps, SLDataType x)
{
	SLCheckCapacity(ps);
	ps->a[ps->size] = x;
	ps->size++;
}

尾刪

void SLPopBack(SL* ps)
{
	//尾部要?jiǎng)h除的數(shù)字無需重新定義數(shù)字,意義不大
	//只需將 size-- 即可(要防止越界)
	assert(ps->size>0);//防止空了還繼續(xù)刪除
	ps->size--;
}

頭刪

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

打印

//打印
void SLPrint(SL* ps)
{
	assert(ps!=NULL);

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

釋放內(nèi)存

//釋放內(nèi)存
void SLDestory(SL* ps)
{
	assert(ps != NULL);

	if (ps->a)
	{
		free(ps->a);
		ps->a = NULL;
		ps->capacity = ps->size = 0;
	}
}

優(yōu)化順序表 (任意位置插入刪除)

增加順序表功能:在中間部分 插入/刪除 數(shù)字,也可簡(jiǎn)化頭尾插刪代的碼量

//任意位置插入 (插入數(shù)據(jù)都要防止越界)
void SLInsert(SL* ps, int pos, SLDataType x)
{
	assert(ps);
	assert(pos >= 0 && pos < ps->size);

	SLCheckCapacity(ps);

	int end = ps->size - 1;
	while (end>=pos)
	{
		ps->a[end + 1] = ps->a[end];
		--end;
	}
	ps->a[pos] = x;
	ps->size++;
}

//任意位置刪除
void SLErase(SL* ps, int pos)
{
	assert(pos >= 0 && pos < ps->size);
	
	int begin = pos;
	while (begin<ps->size)
	{
		ps->a[begin] = ps->a[begin + 1];
		++begin;
	}
	ps->size--;
}

既然已經(jīng)做到在任意位置可以插入代碼,則可以對(duì)之前寫的代碼進(jìn)行簡(jiǎn)化:

優(yōu)化后的頭插尾插

//尾插
void SLPushBack(SL* ps, SLDataType x)
{
	SLInsert(ps, ps->size, x);
}

//頭插
void SLPushFront(SL* ps, SLDataType x)
{
	SLInsert(ps, 0, x);
}

優(yōu)化后的頭刪尾刪

//尾刪
void SLPopBack(SL* ps)
{
	SLErase(ps, ps->size - 1);
}

//頭刪
void SLPopFront(SL* ps)
{
	SLErase(ps, 0);
}

查找和刪除

//查找
int SLFind(SL* ps, SLDataType x)
{
	for (int i = 0; i <ps->size; i++)
	{
		if (ps->a[i] == x)
			return i;
	}
	return -1;//沒找到
}

//修改
int SLModify(SL* ps, int pos, SLDataType x)
{
	assert(ps);
	assert(pos >= 0 && pos < ps->size);

	ps->a[pos] = x;
}

測(cè)試該兩項(xiàng)功能test.c:

//
int x = 0;
printf("請(qǐng)輸入你要?jiǎng)h除的值:>");
scanf("%d", &x);
int pos = SLFind(&sl, x);
if (pos != -1)
{
	SLErase(&sl, pos);
}
else
	printf("沒有找到%d\n",x);
SLPrint(&sl);
//
int y, z;
printf("請(qǐng)輸入你要修改的值和修改后的值:>");
scanf("%d %d", &y,&z);
pos = SLFind(&sl, y);
if (pos != -1)
{
	SLModify(&sl, pos,z);
}
else
	printf("沒有找到%d\n", y);
SLPrint(&sl);
//
int f = 0;
printf("請(qǐng)輸入你要?jiǎng)h除的值,并刪除所有與之相同的值:>");
scanf("%d", &f);
pos = SLFind(&sl, f);
while (pos!=-1)
{
	SLErase(&sl, pos);
	pos = SLFind(&sl, f);
}

進(jìn)行裝飾(菜單)

void menu()
{
	printf("*******************************\n");
	printf("1.頭插  2.尾插	     3.查找 \n");
	printf("4.刪除  5.連續(xù)刪除   6.修改  \n");
	printf("7.打印  8.退出 \n");
	printf("*******************************\n");
}

成品

SeqList.h

#pragma once

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

typedef int SLDataType;

//靜態(tài)順序表 -- N太小,可能不夠用 N太大,可能浪費(fèi)空間
//struct SeqList
//{
//	SLDataType a[N];
//	int size;
//	int capa;
//};

//動(dòng)態(tài)順序表
typedef struct SeqList
{
	SLDataType* a;// 指向數(shù)組的指針
	int size;	  // 數(shù)據(jù)個(gè)數(shù)
	int capacity;//  容量-空間大小
}SL;

//初始化
void SLInit(SL* ps);

//頭插
void SLPushFront(SL* ps, SLDataType x);

//頭刪
void SLPopFront(SL* ps);

//尾插
void SLPushBack(SL* ps, SLDataType x);

//尾刪
void SLPopBack(SL* ps);

//任意位置插入
void SLInsert(SL* ps,int pos, SLDataType x);

//任意位置刪除
void SLErase(SL* ps, int pos);

//打印
void SLPrint(SL* ps);

//動(dòng)態(tài)增容
void SLCheckCapacity(SL* ps);

//釋放內(nèi)存
void SLDestory(SL* ps);

//查找
int SLFind(SL* ps, SLDataType x);

//修改
void SLModify(SL* ps, int pos, SLDataType x);

SeqList.c

#include "SeqList.h"

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

//打印
void SLPrint(SL* ps)
{
	assert(ps!=NULL);

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

//動(dòng)態(tài)增容
void SLCheckCapacity(SL* ps)
{
	assert(ps != NULL);

	//檢查容量空間,滿了擴(kuò)容
	if (ps->capacity == ps->size)
	{
		int newCapacity = 0;
		if (ps->capacity == 0)
			newCapacity = ps->capacity = 4;
		else
			newCapacity = ps->capacity * 2;
		SLDataType* tmp = (SLDataType*)realloc(ps->a, newCapacity * sizeof(SLDataType));
		if (tmp == NULL)
		{
			printf("realloc fail\n");
			//exit(-1);
		}
		ps->a = tmp;
		ps->capacity = newCapacity;
	}
}

//任意位置插入 (插入數(shù)據(jù)都要防止越界)
void SLInsert(SL* ps, int pos, SLDataType x)
{
	assert(ps);
	assert(pos >= 0 && pos <= ps->size);

	SLCheckCapacity(ps);

	//挪動(dòng)數(shù)據(jù)
	int end = ps->size - 1;
	while (end>=pos)
	{
		ps->a[end + 1] = ps->a[end];
		--end;
	}
	ps->a[pos] = x;
	ps->size++;
}

//任意位置刪除
void SLErase(SL* ps, int pos)
{
	assert(pos >= 0 && pos < ps->size);
	
	int begin = pos;
	while (begin<ps->size)
	{
		ps->a[begin] = ps->a[begin + 1];
		++begin;
	}
	ps->size--;
}

//尾插
void SLPushBack(SL* ps, SLDataType x)
{
	SLInsert(ps, ps->size, x);
}

//頭插
void SLPushFront(SL* ps, SLDataType x)
{
	SLInsert(ps, 0, x);
}

//尾刪
void SLPopBack(SL* ps)
{
	SLErase(ps, ps->size - 1);
}

//頭刪
void SLPopFront(SL* ps)
{
	SLErase(ps, 0);
}

//查找
int SLFind(SL* ps, SLDataType x)
{
	for (int i = 0; i <ps->size; i++)
	{
		if (ps->a[i] == x)
			return i;
	}
	return -1;//沒找到
}

//修改
void SLModify(SL* ps, int pos, SLDataType x)
{
	assert(ps);
	assert(pos >= 0 && pos < ps->size);

	ps->a[pos] = x;
}

//釋放內(nèi)存
void SLDestory(SL* ps)
{
	assert(ps != NULL);

	if (ps->a)
	{
		free(ps->a);
		ps->a = NULL;
		ps->capacity = ps->size = 0;
	}
}

Test.c:

#include "SeqList.h"
void menu()
{
	printf("*******************************\n");
	printf("1.頭插  2.尾插	     3.查找 \n");
	printf("4.刪除  5.連續(xù)刪除   6.修改  \n");
	printf("7.打印  8.退出 \n");
	printf("*******************************\n");
}

int main()
{
	//初始化
	SL sl;
	SLInit(&sl);

	int option = -1;
	int x,y,z,f;
	do
	{
		menu();
		scanf("%d", &option);
		int val, pos;
		switch (option)
		{
		case 1:
			printf("請(qǐng)輸入要頭插的數(shù)據(jù),以0結(jié)束:>");
			scanf("%d", &val);
			while (val!=0)
			{
				SLPushFront(&sl, val);
				scanf("%d",&val);
			}
			break;
		case 2:
			printf("請(qǐng)輸入要尾插的數(shù)據(jù),以0結(jié)束:>");
			scanf("%d", &val);
			while (val != 0)
			{
				SLPushBack(&sl, val);
				scanf("%d", &val);
			}
			break;
		case 3:
			printf("請(qǐng)輸入要查找的數(shù)字:>");
			scanf("%d", &y);
			pos = SLFind(&sl, y);
			if (pos != -1)
			{
				printf("找到了%d\n", y);
			}
			else
				printf("沒有找到%d\n", y);
			SLPrint(&sl);
			break;
		case 4:
			printf("請(qǐng)輸入你要?jiǎng)h除的值:>");
			scanf("%d", &x);
			int pos = SLFind(&sl, x);
			if (pos != -1)
			{
				SLErase(&sl, pos);
			}
			else
				printf("沒有找到%d\n", x);
			SLPrint(&sl);
			break;
		case 5:
			printf("請(qǐng)輸入你要?jiǎng)h除的值,并刪除所有與之相同的值:>");
			scanf("%d", &f);
			pos = SLFind(&sl, f);
			if (pos != -1)
			{
				while (pos != -1)
				{
					SLErase(&sl, pos);
					pos = SLFind(&sl, f);
				}
			}
			else
				printf("沒有找到要?jiǎng)h除的值%d\n", f);
			break;
		case 6:
			printf("請(qǐng)輸入你要修改的值和修改后的值:>");
			scanf("%d %d", &y, &z);
			pos = SLFind(&sl, y);
			if (pos != -1)
			{
				SLModify(&sl, pos, z);
			}
			else
				printf("沒有找到%d\n", y);
			SLPrint(&sl);
			break;
		case 7:
			SLPrint(&sl);
			break;
		case 8:
			break;
		default:
			printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");
			break;
		}
	} while (option!=8);
	printf("退出成功\n");
	//釋放內(nèi)存
	SLDestory(&sl);

	return 0;
}

到這里就結(jié)束啦,創(chuàng)作不易,求求點(diǎn)個(gè)贊啦╰(°▽°)╯

?數(shù)據(jù)結(jié)構(gòu):線性表之-順序表,數(shù)據(jù)結(jié)構(gòu),windows文章來源地址http://www.zghlxwxcb.cn/news/detail-684876.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu):線性表之-順序表的文章就介紹完了。如果您還想了解更多內(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)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

    【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

    上一篇文章講述了線性表中的順序表,這篇文章講述關(guān)于鏈表的定義、類別、實(shí)現(xiàn)、多種不同鏈表的優(yōu)缺點(diǎn)和鏈表與順序表的優(yōu)缺點(diǎn)。 關(guān)于上一篇文章的鏈接:線性表之順序表 鏈表是一種物理存儲(chǔ)結(jié)構(gòu)上 非連續(xù)、非順序 的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針

    2024年02月05日
    瀏覽(102)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表之棧、隊(duì)列

    【數(shù)據(jù)結(jié)構(gòu)】線性表之棧、隊(duì)列

    前面兩篇文章講述了關(guān)于線性表中的順序表與鏈表,這篇文章繼續(xù)講述線性表中的 棧和隊(duì)列。 這里講述的兩種線性表與前面的線性表不同,只允許在一端入數(shù)據(jù),一段出數(shù)據(jù),詳細(xì)內(nèi)容請(qǐng)看下面的文章。 順序表與鏈表兩篇文章的鏈接: 線性表之順序表 線性表之鏈表 注意:

    2024年02月06日
    瀏覽(94)
  • 數(shù)據(jù)結(jié)構(gòu):線性表之-單向鏈表(無頭)

    數(shù)據(jù)結(jié)構(gòu):線性表之-單向鏈表(無頭)

    目錄 什么是單向鏈表 順序表和鏈表的區(qū)別和聯(lián)系 順序表: 鏈表: 鏈表表示(單項(xiàng))和實(shí)現(xiàn) 1.1 鏈表的概念及結(jié)構(gòu) 1.2單鏈表(無頭)的實(shí)現(xiàn) 所用文件 將有以下功能: 鏈表定義 創(chuàng)建新鏈表元素 尾插 頭插 尾刪 頭刪 查找-給一個(gè)節(jié)點(diǎn)的指針 改 pos位置之前插入 刪除pos位置的值 成品

    2024年02月09日
    瀏覽(96)
  • 數(shù)據(jù)結(jié)構(gòu):線性表之-循環(huán)雙向鏈表(萬字詳解)

    數(shù)據(jù)結(jié)構(gòu):線性表之-循環(huán)雙向鏈表(萬字詳解)

    目錄 基本概念 1,什么是雙向鏈表 2,與單向鏈表的區(qū)別 雙向鏈表詳解 功能展示: 1. 定義鏈表 2,創(chuàng)建雙向鏈表 3,初始化鏈表 4,尾插 5,頭插 6,尾刪 判斷鏈表是否被刪空 尾刪代碼 7,頭刪 8,pos位置之前插入 優(yōu)化后的頭插 優(yōu)化后的尾插 9,刪除pos位置的節(jié)點(diǎn) 優(yōu)化后的尾刪 優(yōu)

    2024年02月09日
    瀏覽(23)
  • C語言數(shù)據(jù)結(jié)構(gòu)——線性表之棧和隊(duì)列

    C語言數(shù)據(jù)結(jié)構(gòu)——線性表之棧和隊(duì)列

    為什么會(huì)定義棧和隊(duì)列這兩種數(shù)據(jù)結(jié)構(gòu)呢? 原因在于: 之所以會(huì)定義棧和隊(duì)列這樣的數(shù)據(jù)結(jié)構(gòu) 是因?yàn)樗麄冇袃纱筇匦?: 第一: 他們可以保存程序運(yùn)行路徑中各個(gè)點(diǎn)的信息,以便用于回溯操作或其他需要訪問已經(jīng)訪問過的節(jié)點(diǎn)信息的操作。 比如: 棧用于解決迷宮問題,就

    2023年04月11日
    瀏覽(95)
  • 數(shù)據(jù)結(jié)構(gòu)第三課 -----線性表之雙向鏈表

    數(shù)據(jù)結(jié)構(gòu)第三課 -----線性表之雙向鏈表

    ?? ?????????????????????? ??? 作者介紹: ???? ?? ?????????????? ?? ??作者id:老秦包你會(huì), ?? 簡(jiǎn)單介紹:?????????????????????????????? 喜歡學(xué)習(xí)C語言和python等編程語言,是一位愛分享的博主,有興趣的小可愛可以來互討 ????

    2024年02月05日
    瀏覽(95)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表之單鏈表(講解實(shí)現(xiàn)——帶動(dòng)圖理解)

    【數(shù)據(jù)結(jié)構(gòu)】線性表之單鏈表(講解實(shí)現(xiàn)——帶動(dòng)圖理解)

    單鏈表的優(yōu)點(diǎn) 1.頭部和中間插入或刪除數(shù)據(jù)效率高,無需挪動(dòng)。 2.按照需求申請(qǐng)釋放空間,無需擔(dān)心空間不夠用。 單鏈表的缺點(diǎn) 1.不可以進(jìn)行下標(biāo)隨機(jī)訪問。 2.復(fù)雜度是O(n) 3.反向遍歷困難 單鏈表是線性表的一種,單鏈表是鏈?zhǔn)酱鎯?chǔ)的線性表,不同于單鏈表, 鏈表在內(nèi)存空間

    2024年02月06日
    瀏覽(98)
  • 數(shù)據(jù)結(jié)構(gòu)三:線性表之單鏈表(帶頭結(jié)點(diǎn)單向)的設(shè)計(jì)與實(shí)現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)三:線性表之單鏈表(帶頭結(jié)點(diǎn)單向)的設(shè)計(jì)與實(shí)現(xiàn)

    ? ? ? ? 線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)正是所謂的單鏈表,何謂單鏈表?通過地址將每一個(gè)數(shù)據(jù)元素串起來,進(jìn)行使用,這可以彌補(bǔ)順序表在進(jìn)行任意位置的插入和刪除需要進(jìn)行大量的數(shù)據(jù)元素移動(dòng)的缺點(diǎn),只需要修改指針的指向即可;單鏈表的種類又可劃分為很多種,本篇博客詳

    2024年02月19日
    瀏覽(107)
  • 數(shù)據(jù)結(jié)構(gòu):線性表順序存儲(chǔ)結(jié)構(gòu)———順序表

    目錄 順序表的定義 初始化線性表 銷毀線性表 求線性表的長(zhǎng)度 判斷是否為空表 插入數(shù)據(jù)元素 邏輯序號(hào)與物理序號(hào)的區(qū)別 刪除數(shù)據(jù)元素 輸出線性表 ?按序號(hào)求線性表中的元素 按元素值查找 整體上創(chuàng)建順序表 順序表實(shí)驗(yàn) 線性表的順序存儲(chǔ)是把線性表中的所有元素按照其邏輯

    2024年02月03日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性結(jié)構(gòu) 之 順序表

    【數(shù)據(jù)結(jié)構(gòu)】線性結(jié)構(gòu) 之 順序表

    ??博客主頁(yè):大寄一場(chǎng). ??系列專欄:數(shù)據(jù)結(jié)構(gòu)與算法 ??博客制作不易歡迎各位??點(diǎn)贊+?收藏+?關(guān)注 目錄 前言 順序表概念及結(jié)構(gòu) 靜態(tài)代碼實(shí)現(xiàn): 動(dòng)態(tài)代碼實(shí)現(xiàn): SeqList.h文件 SeqList.c文件 test.c文件 本章節(jié)博主將會(huì)帶領(lǐng)大家了解數(shù)據(jù)結(jié)構(gòu)的 線性結(jié)構(gòu)的順序表 。 提到線性

    2024年02月06日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包