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

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

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

目錄

什么是單向鏈表

順序表和鏈表的區(qū)別和聯(lián)系

順序表:

鏈表:

鏈表表示(單項)和實現(xiàn)

1.1 鏈表的概念及結(jié)構(gòu)

1.2單鏈表(無頭)的實現(xiàn)

所用文件

將有以下功能:

鏈表定義

創(chuàng)建新鏈表元素

尾插

頭插

尾刪

頭刪

查找-給一個節(jié)點的指針

pos位置之前插入

刪除pos位置的值

成品展示

SList.h

SList.c

test.c


什么是單向鏈表

單向鏈表是一種常見的線性數(shù)據(jù)結(jié)構(gòu),它由一系列節(jié)點組成,每個節(jié)點包含兩部分:數(shù)據(jù)和指向下一個節(jié)點的指針。每個節(jié)點只能訪問它后面的節(jié)點,而不能訪問前面的節(jié)點。

單向鏈表的特點:

  • 每個節(jié)點包含數(shù)據(jù)和指向下一個節(jié)點的指針。
  • 最后一個節(jié)點的指針指向空值(NULL),表示鏈表的結(jié)束。
  • 可以動態(tài)地添加或刪除節(jié)點,鏈表的長度可以根據(jù)需要進(jìn)行擴(kuò)展或縮小。
  • 可以根據(jù)指針迅速插入或刪除節(jié)點,而不需要移動其他節(jié)點。

單向鏈表相對于數(shù)組來說,具有一些優(yōu)點和缺點:

  • 優(yōu)點:插入和刪除元素的時間復(fù)雜度為O(1),不需要像數(shù)組一樣進(jìn)行元素的移動;鏈表長度可以動態(tài)調(diào)整,沒有固定大小的限制。
  • 缺點:要訪問特定位置的元素需要從頭開始遍歷,時間復(fù)雜度為O(n);相比于數(shù)組,在使用額外的指針存儲下一個節(jié)點的信息,會占用更多的內(nèi)存空間。

由于單向鏈表的特點,它常常被用于需要頻繁插入和刪除元素的場景,或者在事先無法確定數(shù)據(jù)大小和數(shù)量的情況下使用。

順序表和鏈表的區(qū)別和聯(lián)系

順序表:

優(yōu)點:
空間連續(xù)、支持隨機(jī)訪問
缺點:

  1. 中間或前面部分的插入刪除時間復(fù)雜度O(N)
  2. 2.增容的代價比較大。

鏈表:

缺點:
以節(jié)點為單位存儲,不支持隨機(jī)訪問
優(yōu)點:

  1. 任意位置插入刪除時間復(fù)雜度為O(1)
  2. 沒有增容消耗,按需申請節(jié)點空間,不用了直接釋放。

鏈表表示(單項)和實現(xiàn)

1.1 鏈表的概念及結(jié)構(gòu)

概念:鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表
中的指針鏈接次序?qū)崿F(xiàn)的

1.2單鏈表(無頭)的實現(xiàn)

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

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

  1. 無頭單向非循環(huán)鏈表:結(jié)構(gòu)簡單,一般不會單獨用來存數(shù)據(jù)。實際中更多是作為其他數(shù)據(jù)結(jié)
    構(gòu)的子結(jié)構(gòu),如哈希桶、圖的鄰接表等等。另外這種結(jié)構(gòu)在筆試面試中出現(xiàn)很多。
  2. 帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用在單獨存儲數(shù)據(jù)。實際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都
    是帶頭雙向循環(huán)鏈表。另外這個結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實現(xiàn)以后會發(fā)現(xiàn)結(jié)構(gòu)會帶
    來很多優(yōu)勢,實現(xiàn)反而簡單了,后面我們代碼實現(xiàn)了就知道了。

所用文件

定義三個文件:

  1. 頭文件 SList.h
  2. 函數(shù)的實現(xiàn)SList.c
  3. 代碼的測試test.c

將有以下功能:

//打印鏈表
void SListPrint(SLTNode* phead);

//創(chuàng)建新鏈表元素(動態(tài)申請一個節(jié)點)
SLTNode* BuySListNode(SLTDataType x);

//尾插
void SListPushBack(SLTNode** pphead, SLTDataType x);

//頭插
void SListPushFront(SLTNode** pphead, SLTDataType x);

//尾刪
void SListPopBack(SLTNode** pphead);

//頭刪
void SListPopFront(SLTNode** pphead);

//查找->可在查找的基礎(chǔ)上進(jìn)行修改SListAlter
SLTNode* SListFind(SLTNode* phead,SLTDataType x);

//改
void SListAlter(SLTNode* phead, SLTDataType x,SLTDataType y);

//pos位置之前插入
void SListInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);

//刪除pos位置的值
void SListErase(SLTNode** pphead, SLTNode* pos);

鏈表定義

定義鏈表基本結(jié)構(gòu)

typedef struct SListNode
{
	int data;
	struct SListNode* next;
}SLTNode;

創(chuàng)建新鏈表元素

創(chuàng)建新元素用于插入原鏈表

SLTNode* BuySListNode(SLTDataType x)
{
	//開辟空間
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	assert(newnode);

	newnode->data = x;
	newnode->next = NULL;

	return newnode;
}

尾插

void SListPushBack(SLTNode** pphead, SLTDataType x)
{
	//開辟空間
	SLTNode* newnode = BuySListNode(x);

	if (*pphead == NULL)
	{
		//防止開始時節(jié)點為空
		*pphead = newnode;
	}
	else
	{
		//找尾節(jié)點
		SLTNode* tail = *pphead;//找到鏈表首元素
		while (tail->next != NULL)
		{
			//檢索到未節(jié)點
			tail = tail->next;
		}
		//插入
		tail->next = newnode;
	}
}

頭插

void SListPushFront(SLTNode** pphead, SLTDataType x)
{
	SLTNode* newnode = BuySListNode(x);

	newnode->next = *pphead;
	*pphead = newnode;//地址傳給pphead  
	//*pphead=&plist
	
	/*
		頭插無需檢查是否為空
	*/
}

尾刪

void SListPopBack(SLTNode** pphead)
{
	assert(*pphead);
	if ((*pphead)->next==NULL)
	{
		//1,只有一個節(jié)點

		free(*pphead);
		*pphead = NULL;
	}
	else
	{
		//2,有多個節(jié)點
		
		//將前一個鏈元素中存放的地址換為NULL,防止野指針
		/* 寫法一 */
		SLTNode* tailPrev = NULL;
		SLTNode* tail = *pphead;
		while (tail->next!=NULL)
		{
			tailPrev = tail;//tail的地址
			tail = tail->next;
		}
		free(tail);
		tailPrev->next = NULL;

		/* //寫法二
		* //tail尋找的是倒數(shù)第二個元素
		while (tail->next->next!=NULL)
		{
			tail = tail->next;
		}
		free(tail->next);
		tail->next = NULL;
		*/
	}
}

頭刪

void SListPopFront(SLTNode** pphead)
{ 
	//防止被刪空
	assert(*pphead);
	
	//找到首位鏈表元素
	SLTNode* next = (*pphead)->next;//存儲首元素存放下一個元素的地址
	free(*pphead);//釋放首元素
	*pphead = next;//將第二位元素改為首元素
}

查找-給一個節(jié)點的指針

//無需更改元素,故傳一級指針
SLTNode* SListFind(SLTNode* phead, SLTDataType x)
{
	SLTNode* cur = phead;
	while (cur)
	{
		if (cur->data==x)
			return cur;
		cur = cur->next;
	}
	//未找到指定元素,返回NULL
	return NULL;
}

改元素是建立再查找基礎(chǔ)之上進(jìn)行更改

void SListAlter(SLTNode* phead, SLTDataType x, SLTDataType y)
{
	printf("修改成功:\n");
	//先找到相應(yīng)元素,再進(jìn)行更改
	SLTNode* ret = SListFind(phead, y);
	ret->data = x;
}

pos位置之前插入

任意位置之前插入

void SListInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)
{
	assert(pphead);
	assert(pos);

	//頭插
	if (pos == *pphead)
		SListPushFront(pphead, x);
	else
	{ 
		//任意位置之前插入
		SLTNode* prev = *pphead;
		while (prev->next!=pos)//找到pos的位置
		{
			prev = prev->next;//prev存放pos的地址
		}
		//找到位置
		SLTNode* newnode = BuySListNode(x);//創(chuàng)建新鏈表元素,并賦值
		prev->next = newnode;//給前一個元素賦上下一元素地址
		newnode->next = pos;//給插入元素存放下一個元素的地址
	}
}

刪除pos位置的值

void SListErase(SLTNode** pphead, SLTNode* pos)
{
	assert(pphead);
	assert(pos);

	if (*pphead == pos)
		SListPopFront(pphead);//頭刪
	else
	{
		SLTNode* prev = *pphead;
		while (prev->next != pos)//找到pos的位置
		{
			prev = prev->next;//prev存放pos的地址
			//移到pos前一位,next存放的是pos的地址
		}
		//將prev存放的地址改為pos后一個元素的地址
		prev->next = pos->next;
		//釋放pos
		free(pos);
		pos = NULL;
	}
}

成品展示

SList.h

#pragma once

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

typedef int SLTDataType;

typedef struct SListNode
{
	int data;
	struct SListNode* next;
}SLTNode;

//打印鏈表
void SListPrint(SLTNode* phead);

//創(chuàng)建新鏈表元素(動態(tài)申請一個節(jié)點)
SLTNode* BuySListNode(SLTDataType x);

//尾插
void SListPushBack(SLTNode** pphead, SLTDataType x);

//頭插
void SListPushFront(SLTNode** pphead, SLTDataType x);

//尾刪
void SListPopBack(SLTNode** pphead);

//頭刪
void SListPopFront(SLTNode** pphead);

//查找->可在查找的基礎(chǔ)上進(jìn)行修改SListAlter
SLTNode* SListFind(SLTNode* phead,SLTDataType x);

void SListAlter(SLTNode* phead, SLTDataType x,SLTDataType y);

//pos位置之前插入
void SListInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);

//刪除pos位置的值
void SListErase(SLTNode** pphead, SLTNode* pos);

SList.c

#include "SList.h"
 
//打印
void SListPrint(SLTNode* phead)
{
	SLTNode* cur = phead;
	while (cur!=NULL)
	{
		printf("%d->", cur->data);
		cur = cur->next;//存放下一個元素的地址
	}
	printf("NULL\n");
}

//創(chuàng)建新鏈表元素
SLTNode* BuySListNode(SLTDataType x)
{
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	assert(newnode);

	newnode->data = x;
	newnode->next = NULL;

	return newnode;
}

//尾插
void SListPushBack(SLTNode** pphead, SLTDataType x)
{
	assert(pphead);

	SLTNode* newnode = BuySListNode(x);//data

	if (*pphead == NULL)
	{
		//防止開始時節(jié)點為空
		*pphead = newnode;
	}
	else
	{
		//找尾節(jié)點
		SLTNode* tail = *pphead;
		while (tail->next != NULL)
		{
			//存放新節(jié)點地址
			tail = tail->next;
		}
		tail->next = newnode;
	}
}

//頭插
void SListPushFront(SLTNode** pphead, SLTDataType x)
{
	assert(pphead);

	SLTNode* newnode = BuySListNode(x);

	newnode->next = *pphead;
	*pphead = newnode;//地址傳給pphead  
	//*pphead=&plist
	
	/*
		頭插無需檢查是否為空
	*/
}

//尾刪
void SListPopBack(SLTNode** pphead)
{
	assert(*pphead);
	
	if ((*pphead)->next==NULL)
	{
		//1,只有一個節(jié)點

		free(*pphead);
		*pphead = NULL;
	}
	else
	{
		//2,有多個節(jié)點

		//將前一個鏈元素中存放的地址換為NULL,防止野指針
		/* 寫法一 */
		SLTNode* tailPrev = NULL;
		SLTNode* tail = *pphead;
		while (tail->next!=NULL)
		{
			tailPrev = tail;//tail的地址
			tail = tail->next;
		}
		free(tail);
		tailPrev->next = NULL;

		/* //寫法二
		* //tail尋找的是倒數(shù)第二個元素
		while (tail->next->next!=NULL)
		{
			tail = tail->next;
		}
		free(tail->next);
		tail->next = NULL;
		*/
	}
}

//頭刪
void SListPopFront(SLTNode** pphead)
{ 
	//防止被刪空
	assert(*pphead);

	SLTNode* next = (*pphead)->next;
	free(*pphead);
	*pphead = next;
}

//查找-給一個節(jié)點的指針
SLTNode* SListFind(SLTNode* phead, SLTDataType x)
{
	SLTNode* cur = phead;
	while (cur)
	{
		if (cur->data==x)
			return cur;
		cur = cur->next;
	}
	return NULL;
}

//改
void SListAlter(SLTNode* phead, SLTDataType x, SLTDataType y)
{
	assert(phead);
	printf("修改成功:\n");
	SLTNode* ret = SListFind(phead, y);
	ret->data = x;
}
//pos位置之前插入
void SListInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)
{
	assert(pphead);
	assert(pos);

	//頭插
	if (pos == *pphead)
		SListPushFront(pphead, x);
	else
	{ 
		SLTNode* prev = *pphead;
		while (prev->next!=pos)//找到pos的位置
		{
			prev = prev->next;//prev存放pos的地址
		}
		//找到位置
		SLTNode* newnode = BuySListNode(x);//創(chuàng)建新鏈表元素,并賦值
		prev->next = newnode;//給前一個元素賦上下一元素地址
		newnode->next = pos;//給插入元素存放下一個元素的地址
	}
}

//刪除pos位置的值
void SListErase(SLTNode** pphead, SLTNode* pos)
{
	assert(pphead);
	assert(pos);

	if (*pphead == pos)
		SListPopFront(pphead);//頭刪
	else
	{
		SLTNode* prev = *pphead;
		while (prev->next != pos)//找到pos的位置
		{
			prev = prev->next;//prev存放pos的地址
			//移到pos前一位,next存放的是pos的地址
		}
		//將prev存放的地址改為pos后一個元素的地址
		prev->next = pos->next;
		//釋放pos
		free(pos);
		pos = NULL;
	}
}

test.c

test.c僅僅是用于測試代碼,本文以弄懂單向鏈表為主,故不進(jìn)行菜單制作
但改測試中也包含了對部分鏈表結(jié)構(gòu)即原理進(jìn)行了講解,請耐心看完

#include "SList.h"
void TestSList1()
{	
	SLTNode* n1 = (SLTNode*)malloc(sizeof(SLTNode));
	assert(n1);

	SLTNode* n2 = (SLTNode*)malloc(sizeof(SLTNode));
	assert(n2);

	SLTNode* n3 = (SLTNode*)malloc(sizeof(SLTNode));
	assert(n3);

	SLTNode* n4 = (SLTNode*)malloc(sizeof(SLTNode));
	assert(n4);
	
	n1->data=1;
	n2->data=2;
	n3->data=3;
	n4->data=4;

	n1->next = n2;
	n2->next = n3;
	n3->next = n4;
	n4->next = NULL;
	
	SListPrint(n1);
}

void TestSList2()
{
	SLTNode* plist = NULL;
	//傳的是plist指針的地址
	
	//如果直接傳plist,將導(dǎo)致SLTNode* phead中
	//phead為臨時拷貝,不影響實參
	SListPushBack(&plist, 1);
	SListPushBack(&plist, 2);
	SListPushBack(&plist, 3);
	SListPushBack(&plist, 4);
	
	SListPrint(plist);//不改變無需傳二級指針

	SListPushFront(&plist,0);
	SListPrint(plist);

	SListPopFront(&plist);
	SListPrint(plist);
	
	SListPopBack(&plist);
	/*SListPrint(plist);
	SListPopBack(&plist);
	SListPrint(plist);
	SListPopBack(&plist);
	SListPrint(plist);
	SListPopBack(&plist);
	SListPrint(plist);*/
	/*SListPopBack(&plist);
	SListPrint(plist);*/
}
	
void TestSList3()
{
	SLTNode* plist = NULL;
	//傳的是plist指針的地址

	//如果直接傳plist,將導(dǎo)致SLTNode* phead中
	//phead為臨時拷貝,不影響實參
	SListPushBack(&plist, 1);
	SListPushBack(&plist, 2);
	SListPushBack(&plist, 3);
	SListPushBack(&plist, 4);

	SListPrint(plist);//不改變無需傳二級指針


	//查找
	SLTNode* ret = SListFind(plist, 3);
	if (ret)
	{
		//返回值不為空則為找到
		printf("找到了\n");
	}
	SListPrint(plist);
	修改
	//SListAlter(plist, 20, 2);
	//SListPrint(plist);

	//插入
	SLTNode* pos = SListFind(plist, 3);//先要找到再進(jìn)行更改
	if (pos)
	{
		SListInsert(&plist, pos, 40);
	}
	SListPrint(plist);

	//刪除
	pos = SListFind(plist, 2);//先要找到再進(jìn)行刪除
	if (pos)
	{
		SListErase(&plist, pos);
	}
	SListPrint(plist);
}

int main()
{
	TestSList3();
	 
	return 0;
}

單向鏈表講解完畢啦!創(chuàng)作不易,如果喜歡請留下個贊吧,感激不盡??數(shù)據(jù)結(jié)構(gòu):線性表之-單向鏈表(無頭),數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu)文章來源地址http://www.zghlxwxcb.cn/news/detail-703402.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu):線性表之-單向鏈表(無頭)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • [Collection與數(shù)據(jù)結(jié)構(gòu)] 鏈表與LinkedList (一):鏈表概述與單向無頭非循環(huán)鏈表實現(xiàn)

    [Collection與數(shù)據(jù)結(jié)構(gòu)] 鏈表與LinkedList (一):鏈表概述與單向無頭非循環(huán)鏈表實現(xiàn)

    上篇文章我們已經(jīng)對順序表進(jìn)行了實現(xiàn),并且對ArrayList進(jìn)行了使用,我們知道ArrayList底層是使用數(shù)組實現(xiàn)的. 由于其底層是一段連續(xù)空間,當(dāng)在ArrayList任意位置插入或者刪除元素時, 就需要將后序元素整體往前或者往后搬移,時間復(fù)雜度為O(n),效率比較低 ,因此ArrayList不適合做

    2024年04月26日
    瀏覽(94)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

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

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

    2024年02月05日
    瀏覽(97)
  • 數(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é)點 優(yōu)化后的尾刪 優(yōu)

    2024年02月09日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)第三課 -----線性表之雙向鏈表

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

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

    2024年02月05日
    瀏覽(91)
  • 數(shù)據(jù)結(jié)構(gòu)(王道)——線性表之靜態(tài)鏈表&順序表和鏈表的比較

    數(shù)據(jù)結(jié)構(gòu)(王道)——線性表之靜態(tài)鏈表&順序表和鏈表的比較

    ? 如何定義一個靜態(tài)鏈表 ? ? 初始化靜態(tài)鏈表: ? 靜態(tài)鏈表的查找、插入、刪除 ? ? ? ? ? 創(chuàng): 銷: ? 增、刪: ? 查: ? 順序表、鏈表該如何選擇? ?

    2024年02月16日
    瀏覽(695)
  • 第14章_集合與數(shù)據(jù)結(jié)構(gòu)拓展練習(xí)(前序、中序、后序遍歷,線性結(jié)構(gòu),單向鏈表構(gòu)建,單向鏈表及其反轉(zhuǎn),字符串壓縮)

    第14章_集合與數(shù)據(jù)結(jié)構(gòu)拓展練習(xí)(前序、中序、后序遍歷,線性結(jié)構(gòu),單向鏈表構(gòu)建,單向鏈表及其反轉(zhuǎn),字符串壓縮)

    1、前序、中序、后序遍歷 分析: 完全二叉樹: 葉結(jié)點只能出現(xiàn)在最底層的兩層,且最底層葉結(jié)點均處于次底層葉結(jié)點的左側(cè) 2、線性結(jié)構(gòu) 3、其它 4、單向鏈表構(gòu)建 (1)定義一個單向鏈表SingleLinked類 包含私有的靜態(tài)內(nèi)部類Node 包含Object類型的data屬性和Node類型的next屬性 包含

    2024年01月23日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表之棧、隊列

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

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

    2024年02月06日
    瀏覽(88)
  • 數(shù)據(jù)結(jié)構(gòu):線性表之-順序表

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

    目錄 1.線性表概念 1.1 什么是順序列表 1.2 線性表 2.順序表實現(xiàn) 將有以下功能: 詳細(xì)過程 順序表的動態(tài)存儲 順序表初始化 尾插 擴(kuò)容 頭插 更改后的尾插 尾刪 頭刪 打印 釋放內(nèi)存 優(yōu)化順序表 (任意位置插入刪除) 優(yōu)化后的頭插尾插 優(yōu)化后的頭刪尾刪 查找和刪除 進(jìn)行裝飾(菜單

    2024年02月10日
    瀏覽(90)
  • [數(shù)據(jù)結(jié)構(gòu)]鏈表之單鏈表(詳解)

    [數(shù)據(jù)結(jié)構(gòu)]鏈表之單鏈表(詳解)

    在學(xué)習(xí) 鏈表 之前,我們已經(jīng)學(xué)習(xí)了 順序表 了 根據(jù) 順序表 的特點,我們可以發(fā)現(xiàn) 順序表 有優(yōu)點,也有一些缺陷。 所以根據(jù) 順序表 的缺點,鏈表就橫空出世啦~ **概念:鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次

    2023年04月08日
    瀏覽(91)
  • 【數(shù)據(jù)結(jié)構(gòu)】- 鏈表之單鏈表(下)

    【數(shù)據(jù)結(jié)構(gòu)】- 鏈表之單鏈表(下)

    未來藏在迷霧中 叫人看來膽怯 帶你踏足其中 就會云開霧散 本章是關(guān)于數(shù)據(jù)結(jié)構(gòu)中的鏈表之單鏈表(下) 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 1.2.1 在pos位置插入(也就是pos位置之前) 流程圖 多個節(jié)點 一個節(jié)點 1.2.2 在pos位置之后插入 流程圖: 注意: 下面這種寫

    2023年04月23日
    瀏覽(101)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包