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

【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)!?。。?/h1>

這篇具有很好參考價(jià)值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)?。。。?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)?。。。? referrerpolicy=


【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)?。。。? referrerpolicy=

??一、前言

停更了一個(gè)月限時(shí)返場(chǎng)啦??從本篇文章開(kāi)始就進(jìn)入了我們數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)嘍!本篇文章也是《數(shù)據(jù)結(jié)構(gòu)與算法》 專(zhuān)欄的第一篇文章,本篇的內(nèi)容是順序表的學(xué)習(xí),也是數(shù)據(jù)結(jié)構(gòu)的開(kāi)胃小菜,希望烙鐵們可以理解消化哦??!?。?/strong>

在我們學(xué)習(xí)順序表之前呢,我們大家肯定會(huì)有疑問(wèn),什么是數(shù)據(jù)結(jié)構(gòu),為什么要去學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),順序表在數(shù)據(jù)結(jié)構(gòu)里面代表什么呢?,這里我來(lái)給大家一次解惑,讓大家真正的搞懂?dāng)?shù)據(jù)結(jié)構(gòu),學(xué)習(xí)起來(lái)才更加有動(dòng)力??!

??1. 什么是數(shù)據(jù)結(jié)構(gòu)

??簡(jiǎn)單地說(shuō),數(shù)據(jù)結(jié)構(gòu)是以某種特定的布局方式存儲(chǔ)數(shù)據(jù)的容器。這種“布局方式”決定了數(shù)據(jù)結(jié)構(gòu)對(duì)于某些操作是高效的,而對(duì)于其他操作則是低效的。首先我們需要理解各種數(shù)據(jù)結(jié)構(gòu),才能在處理實(shí)際問(wèn)題時(shí)選取最合適的數(shù)據(jù)結(jié)構(gòu)。

??數(shù)據(jù)的邏輯結(jié)構(gòu)是指反映數(shù)據(jù)元素之間的邏輯關(guān)系的數(shù)據(jù)結(jié)構(gòu),其中的邏輯關(guān)系是指數(shù)據(jù)元素之間的前后間關(guān)系,而與他們?cè)谟?jì)算機(jī)中的存儲(chǔ)位置無(wú)關(guān)。邏輯結(jié)構(gòu)分為以下幾種:

??集合結(jié)構(gòu):數(shù)據(jù)元素同屬一個(gè)集合,單個(gè)數(shù)據(jù)元素之間沒(méi)有任何關(guān)系。
??線性結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在一對(duì)一的相互關(guān)系。
??樹(shù)形結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在一對(duì)多的相互關(guān)系。
??圖形結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在多對(duì)多的相互關(guān)系。

??數(shù)據(jù)的物理結(jié)構(gòu)是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)空間的存放形式,它包括數(shù)據(jù)元素的機(jī)內(nèi)表示和關(guān)系的機(jī)內(nèi)表示。物理結(jié)構(gòu)又叫存儲(chǔ)結(jié)構(gòu),分為以下幾種:

??順序存儲(chǔ)結(jié)構(gòu):一段連續(xù)的內(nèi)存空間。優(yōu)點(diǎn):隨機(jī)訪問(wèn);缺點(diǎn):插入刪除效率低,大小固定。
??鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu):不連續(xù)的內(nèi)存空間。優(yōu)點(diǎn):大小動(dòng)態(tài)擴(kuò)展,插入刪除效率高;缺點(diǎn):不能隨機(jī)訪問(wèn)。
??索引存儲(chǔ)結(jié)構(gòu):為了方便查找,整體無(wú)序,但索引塊之間有序,需要額外空間,存儲(chǔ)索引表。優(yōu)點(diǎn):對(duì)順序查找的一種改進(jìn),查找效率高;缺點(diǎn):需額外空間存儲(chǔ)索引。
??散列存儲(chǔ)結(jié)構(gòu):選取某個(gè)函數(shù),數(shù)據(jù)元素根據(jù)函數(shù)計(jì)算存儲(chǔ)位置可能存在多個(gè)數(shù)據(jù)元素存儲(chǔ)在同一位置,引起地址沖。優(yōu)點(diǎn):查找基于數(shù)據(jù)本身即可找到,查找效率高,存取效率高;缺點(diǎn):存取隨機(jī),不便于順序查找。

??二、順序表的概念----線性表

??1. 什么是線性表

本次我們要來(lái)介紹,第一種數(shù)據(jù)結(jié)構(gòu),也是數(shù)據(jù)結(jié)構(gòu)中最簡(jiǎn)單的一部分:線性表
此時(shí)此刻,肯定會(huì)有烙鐵會(huì)有疑問(wèn),為什么難道他會(huì)像一條線一樣一次連接嗎?
沒(méi)錯(cuò),當(dāng)數(shù)據(jù)首尾依次相連接,這種數(shù)據(jù)結(jié)構(gòu)就被叫做線性表
注意 :相連接是邏輯上的連接,不是空間上的連接。
此時(shí),可能還會(huì)有烙鐵站出來(lái)說(shuō):你說(shuō)的這不就是數(shù)組嘛,小意思,我會(huì)!
其實(shí) 數(shù)組只是一種線性表,可是線性表還有很多種形式哦!
線性表的形式: 數(shù)組、鏈表、順序表、隊(duì)列等 (其中數(shù)組我們?cè)贑語(yǔ)言已經(jīng)學(xué)過(guò),不再提及) 。
??官方解釋線性表(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ǔ)。

【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)?。。。? referrerpolicy=

??2. 順序表與數(shù)組的區(qū)別

??順序表:順序表是用 一段物理地址連續(xù)存儲(chǔ)單元 ,依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu)
順序表就是將數(shù)據(jù)連著存放,存放的數(shù)據(jù)空間也是連著的

??數(shù)組:數(shù)據(jù)不用按順序的存放,可以隨意的存放
??區(qū)別:數(shù)組不按空間順序隨意地存放數(shù)據(jù),但是順序表的數(shù)據(jù)是要按照空間的的順序存放
說(shuō)的這里估計(jì)有些烙鐵已經(jīng)開(kāi)始有點(diǎn) 暈暈的狀態(tài)了,我來(lái)給大家畫(huà)圖解釋一下:

【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)?。。。? referrerpolicy=

??三、順序表詳解

?? 靜態(tài)順序表

??靜態(tài)順序表:使用定長(zhǎng)數(shù)組存儲(chǔ)
??優(yōu)點(diǎn):操作簡(jiǎn)單,代碼實(shí)現(xiàn)容易
??缺點(diǎn):定長(zhǎng)數(shù)組很受限制,數(shù)組開(kāi)小了不夠用,開(kāi)大了又浪費(fèi)

//靜態(tài)順序表
#define N 10;
typedef int SLDatatype;

typedef struct SeqList
{
	SLDatatype a[N];
	int size;
}SL;

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

??動(dòng)態(tài)順序表:使用動(dòng)態(tài)開(kāi)辟的數(shù)組進(jìn)行數(shù)據(jù)的存儲(chǔ)
??優(yōu)點(diǎn):數(shù)組大小可以根據(jù)自己的需求進(jìn)行調(diào)節(jié)
??缺點(diǎn):代碼比較復(fù)雜

//動(dòng)態(tài)順序表
typedef int SLDatatype;

typedef struct SeqList
{
	SLDatatype* a; //指向動(dòng)態(tài)開(kāi)辟的數(shù)組
	int size; //存儲(chǔ)的有效數(shù)據(jù)的個(gè)數(shù)
	int capacity; //當(dāng)前容量
}SL;

??創(chuàng)建動(dòng)態(tài)順序表

??這里先創(chuàng)建三個(gè)文件:
1??:SeqList.h文件,用于函數(shù)的聲明
2??:SeqList.c文件,用于函數(shù)的定義
3??:Test.c文件,用于測(cè)試函數(shù)
建立三個(gè)文件的目的: 將順序表作為一個(gè)項(xiàng)目來(lái)進(jìn)行書(shū)寫(xiě),方便我們的學(xué)習(xí)與觀察。

?接口1:定義結(jié)構(gòu)體SL

??請(qǐng)看代碼與注釋??

typedef int SLDatatype; //數(shù)據(jù)類(lèi)型

typedef struct SeqList
{
	SLDatatype* a; //指向動(dòng)態(tài)開(kāi)辟的數(shù)組
	int size; //存儲(chǔ)的有效數(shù)據(jù)的個(gè)數(shù)
	int capacity; //當(dāng)前容量
}SL;

?接口2:初始化結(jié)構(gòu)體(SLInit)

??請(qǐng)看代碼與注釋??

void SLInit(SL* psl)
{
	assert(psl);

	psl->a = (SLDatatype*)malloc(sizeof(SLDatatype) * 4);
	if (psl->a == NULL)
	{
		perror("malloc fail");
		return;
	}

	psl->capacity = 4;
	psl->size = 0;
}

?接口3:檢查結(jié)構(gòu)體中的數(shù)組是否需要擴(kuò)容(SLCheckCapacity)

??請(qǐng)看代碼與注釋??

void SLCheckCapacity(SL* psl)
{
	assert(psl);

	if (psl->size == psl->capacity)
	{
		SLDatatype* tmp = (SLDatatype*)realloc(psl->a, sizeof(SLDatatype) * psl->capacity * 2);
		if (tmp == NULL);
		{
			perror("realloc fail");
			return;
		}

		psl->a = tmp;
		psl->capacity *= 2;
	}
}

?接口4:結(jié)構(gòu)體銷(xiāo)毀(SLDestroy)

銷(xiāo)毀順序表所開(kāi)辟的空間,防止內(nèi)存泄漏

??請(qǐng)看代碼與注釋??

void SLDestroy(SL* psl)
{
	assert(psl);

	free(psl->a);
	psl->a = NULL;
	psl->size = 0;
	psl->capacity = 0;
}

?接口5:打?。⊿LPrint)

??請(qǐng)看代碼與注釋??

void SLPrint(SL* psl)
{
	assert(psl);

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

?接口6:尾插(SLPushBack)

??請(qǐng)看代碼與注釋??

void SLPushBack(SL* psl, SLDatatype x)
{
	assert(psl);

	SLCheckCapacity(psl);//檢查是否需要擴(kuò)容

	psl->a[psl->size] = x;
	psl->size++;
}

?接口7:頭插(SLPushFront)

(1)從第一個(gè)數(shù)據(jù)開(kāi)始向后挪動(dòng):會(huì)發(fā)生覆蓋----不可取?
【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)?。。。? referrerpolicy=
(2)從最后一個(gè)數(shù)據(jù)開(kāi)始向后挪動(dòng):理想狀態(tài)?
【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)!?。。? referrerpolicy=

??請(qǐng)看代碼與注釋??

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++;
}

?接口8:尾刪(SLPopBack)

??請(qǐng)看代碼與注釋??

void SLPopBack(SL* psl)
{
	//暴力檢查
	assert(psl->size > 0);

	//溫柔的檢查
	//if (psl->size == 0)
	//	return;

	psl->size--;
}

?接口9:頭刪(SLPopFront)

(1)從最后一個(gè)數(shù)據(jù)開(kāi)始向前挪動(dòng):會(huì)發(fā)生覆蓋----不可取?
【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)?。。。? referrerpolicy=
(1)先從下標(biāo)為 1 的數(shù)據(jù)開(kāi)始向前挪動(dòng):理想狀態(tài)?
【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)?。。。? referrerpolicy=

??請(qǐng)看代碼與注釋??

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++;
}

?接口10:在指定位置(pos)插入(SLInsert)

??要實(shí)現(xiàn)這一功能,我們依然需要一個(gè)end下標(biāo),數(shù)據(jù)從后往前依次后挪,直到pos下標(biāo)移動(dòng)完畢。另外,別忘了檢查容量。

??請(qǐng)看代碼與注釋??

void SLInsert(SL* psl, int pos, SLDatatype x)
{
	assert(0 <= pos && pos <= psl->size);

	SLCheckCapacity(psl);

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

	psl->a[pos] = x;
	psl->size++;
}

??拓展:了解了以上在指定位置插入的代碼之后,我們就可以在頭插和尾插中復(fù)用該功能

??請(qǐng)看代碼??

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

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

??這樣寫(xiě)是不是非常滴香!

?接口11:在指定位置(pos)刪除(SLErase)

??要實(shí)現(xiàn)這一功能,我們依然需要一個(gè)start下標(biāo),數(shù)據(jù)從前往后依次前挪,直到移動(dòng)完畢。

??請(qǐng)看代碼與注釋??

void SLErase(SL* psl, int pos)
{
	assert(0 <= pos && pos < psl->size);

	int start = pos + 1;
	while (start < psl->size)
	{
		psl->a[start - 1] = psl->a[start];
		start++;
	}

	psl->size--;
}

??拓展:同樣的了解了以上在指定位置刪除的代碼之后,我們就可以在頭刪和尾刪中復(fù)用該功能

??請(qǐng)看代碼??

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

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

?接口12:查找某一個(gè)數(shù)據(jù)的位置(SLFind)

找到返回下標(biāo),沒(méi)找到返回-1

??請(qǐng)看代碼與注釋??

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;
}

?接口13:查找某一個(gè)數(shù)據(jù)的位置(SLFind)

??請(qǐng)看代碼與注釋??

void SLModify(SL* psl, int pos, SLDatatype x)
{
	assert(0 <= pos && pos < psl->size);

	psl->a[pos] = x;
}

?菜單

??數(shù)據(jù)結(jié)構(gòu)階段不建議寫(xiě)菜單,不便于調(diào)試,本篇文章菜單寫(xiě)在下面的完整代碼中的 Test.c文件和 main主函數(shù)中了,需要的烙鐵自行學(xué)習(xí)查看??

??四、完整代碼

??SeqList.h

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

//動(dòng)態(tài)順序表
typedef int SLDatatype; //數(shù)據(jù)類(lèi)型

typedef struct SeqList
{
	SLDatatype* a; //指向動(dòng)態(tài)開(kāi)辟的數(shù)組
	int size; //存儲(chǔ)的有效數(shù)據(jù)的個(gè)數(shù)
	int capacity; //當(dāng)前容量
}SL;


//初始化
void SLInit(SL* psl);
//銷(xiāo)毀
void SLDestroy(SL* psl);
//檢查是否需要擴(kuò)容
void SLCheckCapacity(SL* psl);
//打印
void SLPrint(SL* psl);
//尾插
void SLPushBack(SL* psl, SLDatatype x);
//頭插
void SLPushFront(SL* psl, SLDatatype x);
//尾刪
void SLPopBack(SL* psl);
//頭刪
void SLPopFront(SL* psl);
//在pos位置插入
void SLInsert(SL* psl, int pos, SLDatatype x);
//在pos位置刪除
void SLErase(SL* psl, int pos);
//查找(找到返回下標(biāo),沒(méi)找到返回-1)
int SLFind(SL* psl, SLDatatype x);
//修改
void SLModify(SL* psl, int pos, SLDatatype x);

??SeqList.c

#include"SeqList.h"

//初始化
void SLInit(SL* psl)
{
	assert(psl);

	psl->a = (SLDatatype*)malloc(sizeof(SLDatatype) * 4);
	if (psl->a == NULL)
	{
		perror("malloc fail");
		return;
	}

	psl->capacity = 4;
	psl->size = 0;
}

//銷(xiāo)毀
void SLDestroy(SL* psl)
{
	assert(psl);


	free(psl->a);
	psl->a = NULL;
	psl->size = 0;
	psl->capacity = 0;
}

//檢查是否需要擴(kuò)容
void SLCheckCapacity(SL* psl)
{
	assert(psl);


	if (psl->size == psl->capacity)
	{
		SLDatatype* tmp = (SLDatatype*)realloc(psl->a, sizeof(SLDatatype) * psl->capacity * 2);
		if (tmp == NULL);
		{
			perror("realloc fail");
			return;
		}

		psl->a = tmp;
		psl->capacity *= 2;
	}
}

//打印
void SLPrint(SL* psl)
{
	assert(psl);


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

//尾插
void SLPushBack(SL* psl, SLDatatype x)
{
	//SLCheckCapacity(psl);

	//psl->a[psl->size] = x;
	//psl->size++;

	SLInsert(psl, psl->size, x);
}

//頭插
void SLPushFront(SL* psl, SLDatatype x)
{
	//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++;

	SLInsert(psl, 0, x);
}

//尾刪
void SLPopBack(SL* psl)
{
	//暴力檢查
	//assert(psl->size > 0);

	//溫柔的檢查
	//if (psl->size == 0)
	//	return;

	//psl->size--;

	SLErase(psl, psl->size - 1);
}

//頭刪
void SLPopFront(SL* psl)
{
	//暴力檢查
	//assert(psl->size > 0);

	//int start = 1;
	//while (start < psl->size)
	//{
	//	psl->a[start - 1] = psl->a[start];
	//	start++;
	//}

	//psl->size--;

	SLErase(psl, 0);
}

//在pos位置插入
void SLInsert(SL* psl, int pos, SLDatatype x)
{
	assert(0 <= pos && pos <= psl->size);

	SLCheckCapacity(psl);

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

	psl->a[pos] = x;
	psl->size++;
}

//在pos位置刪除
void SLErase(SL* psl, int pos)
{
	assert(0 <= pos && pos < psl->size);

	int start = pos + 1;
	while (start < psl->size)
	{
		psl->a[start - 1] = psl->a[start];
		start++;
	}

	psl->size--;
}

//查找(找到返回下標(biāo),沒(méi)找到返回-1)
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;
}

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

	psl->a[pos - 1] = x;
}

??Test.c

#include"SeqList.h"

//尾插測(cè)試
void TestSeqList1()
{
	SL s;
	SLInit(&s);
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);
	SLPushBack(&s, 6);
	SLPushBack(&s, 7);
	SLPushBack(&s, 8);
	SLPrint(&s);

	SLDestroy(&s);
}

//頭插測(cè)試
void TestSeqList2()
{
	SL s;
	SLInit(&s);
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);
	SLPushFront(&s, 6);
	SLPushFront(&s, 7);
	SLPushFront(&s, 8);
	SLPrint(&s);

	SLDestroy(&s);
}

//尾刪測(cè)試
void TestSeqList3()
{
	SL s;
	SLInit(&s);
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);
	SLPushFront(&s, 6);
	SLPushFront(&s, 7);
	SLPushFront(&s, 8);
	SLPrint(&s);

	SLPopBack(&s);
	SLPopBack(&s);
	SLPrint(&s);

	SLDestroy(&s);
}

//頭刪測(cè)試
void TestSeqList4()
{
	SL s;
	SLInit(&s);
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);
	SLPushFront(&s, 6);
	SLPushFront(&s, 7);
	SLPushFront(&s, 8);
	SLPrint(&s);

	SLPopBack(&s);
	SLPopBack(&s);
	SLPrint(&s);

	SLPopFront(&s);
	SLPopFront(&s);
	SLPrint(&s);

	SLDestroy(&s);
}

//指定位置插入測(cè)試
void TestSeqList5()
{
	SL s;
	SLInit(&s);
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);
	SLPushFront(&s, 6);
	SLPushFront(&s, 7);
	SLPrint(&s);

	SLInsert(&s, 2, 30);
	SLPrint(&s);

	SLDestroy(&s);
}

//指定位置刪除測(cè)試
void TestSeqList6()
{
	SL s;
	SLInit(&s);
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);
	SLPushBack(&s, 6);
	SLPrint(&s);

	SLInsert(&s, 2, 30);
	SLPrint(&s);
	SLErase(&s, 2);
	SLPrint(&s);

	SLDestroy(&s);
}

//菜單
void menu()
{
	printf("***********************************************************\n");
	printf("1、尾插數(shù)據(jù)             2、尾刪數(shù)據(jù)\n");
	printf("\n");
	printf("3、頭插數(shù)據(jù)             4、頭刪數(shù)據(jù)\n");
	printf("\n");
	printf("5、在任意位置插入數(shù)據(jù)(位置3插入20)\n");
	printf("\n");
	printf("6、在任意位置刪除數(shù)據(jù)              \n");
	printf("\n");
	printf("7、查找某個(gè)數(shù)據(jù)的位置              \n");
	printf("\n");
	printf("8、修改數(shù)據(jù)                       \n");
	printf("\n");
	printf("9、打印數(shù)據(jù)                       \n");
	printf("\n");
	printf("-1、退出                          \n");
	printf("\n");
	printf("***********************************************************\n");

}


int main()
{
	printf("*************  歡迎大家來(lái)到動(dòng)態(tài)順序表的測(cè)試  **************\n");
	int option = 0;
	SL s;
	SLInit(&s);
	do
	{
		menu();
		printf("請(qǐng)輸入你的操作:>");
		scanf("%d", &option);
		int sum = 0;
		int x = 0;
		int y = 0;
		int z = 0;
		int pos = 0;
		int w = 0;
		int o = 0;
		int p = 0;
		switch (option)
		{
		case 1:
			printf("請(qǐng)依次輸入你要尾插的數(shù)據(jù):,以-1結(jié)束\n");
			scanf("%d", &sum);
			while (sum != -1)
			{
				SLPushBack(&s, sum);    // 1.尾插
				scanf("%d", &sum);
			}
			break;
		case 2:
			SLPopBack(&s);             // 2.尾刪
			break;
		case 3:
			scanf("%d", &x);
			SLPushFront(&s, x);       // 3.頭插
			break;
		case 4:
			SLPopFront(&s);           // 4.頭刪
			break;
		case 5:
			SLInsert(&s, 3, 20);     // 5.在任意位置插入數(shù)據(jù)
			break;
		case 6:
			SLErase(&s, 3);          // 6.在任意位置刪除數(shù)據(jù)
			break;
		case 7:
			printf("請(qǐng)輸入要?jiǎng)h除序列的中的某個(gè)數(shù)據(jù)>\n");
			scanf("%d", &z);
			y = SLFind(&s, z);        // 7.查找某個(gè)數(shù)字的位置
			printf("%d的位置在%d處: \n", z, y);
			break;
		case 9:
			SLPrint(&s);
			break;
		case 8:
			printf("請(qǐng)輸入要修改序列的中的某個(gè)數(shù)據(jù)的下標(biāo):>\n");
			scanf("%d", &o);
			printf("請(qǐng)輸入要修改成什么:>\n");
			scanf("%d", &p);
			SLModify(&s, o, p);
			break;
		default:
			if (option == -1)
			{
				exit(0);  // 退出程序 
			}
			else
			{
				printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");
			}
			break;

		}
	} while (option != -1);   // 退出程序

	SLDestroy(&s);

	return 0;
}

?運(yùn)行界面

【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)?。。。? referrerpolicy=

??這期內(nèi)容些許復(fù)雜,需要慢慢理解消化哦!

總結(jié)??
以上就是 【數(shù)據(jù)結(jié)構(gòu)】順序表—C語(yǔ)言版 的全部?jī)?nèi)容啦????????
本文章所在【數(shù)據(jù)結(jié)構(gòu)與算法】專(zhuān)欄,感興趣的烙鐵可以訂閱本專(zhuān)欄哦??????
前途很遠(yuǎn),也很暗,但是不要怕,不怕的人面前才有路。??????
小的會(huì)繼續(xù)學(xué)習(xí),繼續(xù)努力帶來(lái)更好的作品??????
創(chuàng)作寫(xiě)文不易,還多請(qǐng)各位大佬uu們多多支持哦??????

【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)?。。。? referrerpolicy=文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-457424.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】順序表---C語(yǔ)言版(數(shù)據(jù)結(jié)構(gòu)開(kāi)篇小菜,全網(wǎng)最詳細(xì)!小白看一遍就學(xué)會(huì)?。。。┑奈恼戮徒榻B完了。如果您還想了解更多內(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語(yǔ)言版】順序表

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

    各位小伙伴大家好!小編來(lái)給大家講解一下數(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日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)c語(yǔ)言版:順序表

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    本期帶大家一起來(lái)用C語(yǔ)言代碼實(shí)現(xiàn)順序表?????? 順序表是一段物理地址連續(xù)的存儲(chǔ)單元,依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu)。分為靜態(tài)順序表與動(dòng)態(tài)順序表。 ?? ?? ?? 靜態(tài)順序表 :使用定長(zhǎng)數(shù)組用來(lái)存儲(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語(yǔ)言)——順序表詳解

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

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

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

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

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

    2024年04月16日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包