最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實(shí)現(xiàn)單鏈表的基本功能詳解

 更新時(shí)間:2021年11月24日 16:22:51   作者:我是一個(gè)小小孩  
鏈表是一個(gè)結(jié)構(gòu)體實(shí)現(xiàn)的一種線性表,它只能從前往后,不可以從后往前,在實(shí)現(xiàn)單鏈表的操作時(shí),需要用指針來操作。本文主要介紹了實(shí)現(xiàn)單鏈表的基本功能的代碼示例,具有一定價(jià)值,感興趣的同學(xué)可以學(xué)習(xí)一下

1.首先簡(jiǎn)單了解一下鏈表的概念:

要注意的是鏈表是一個(gè)結(jié)構(gòu)體實(shí)現(xiàn)的一種線性表,它只能從前往后,不可以從后往前(因?yàn)閚ext只保存下一個(gè)節(jié)點(diǎn)的地址).在實(shí)現(xiàn)單鏈表的操作時(shí),需要用指針來操作.很簡(jiǎn)單,注釋寫的很詳細(xì),歡迎大家指正哈哈哈哈~之前寫的太爛了重新寫了一下.....

2.代碼展示:

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
typedef struct linklist {
	int data;
	struct linklist* next;
}node;
//目錄
//1.動(dòng)態(tài)申請(qǐng)節(jié)點(diǎn)
node* Creatnode(int x);
//2.單鏈表的尾插
void PushBack(node** plist, int x);
//3.單鏈表的打印
void Printlist(node** plist);
//4.單鏈表尾刪
void Popback(node** plist);
//5.單鏈表的頭插
void PushFront(node** plist, int x);
//6.單鏈表的頭刪
void PopFrount(node** plist);
//7.單鏈表的查找
node* Findpos(node* plist, int x);
//8.單鏈表在pos位置之后插入x
void Insertlinstafter(node* pos, int x);
//9.單鏈表刪除pos位置之后的元素
void PopPosAfter(node* pos);
//10.單鏈表的銷毀
void Destorylist(node** plist);
//1.動(dòng)態(tài)申請(qǐng)節(jié)點(diǎn)
node*  Creatnode(int x) {
	node* t = (node*)malloc(sizeof(node));
	if (t == NULL) {
		assert(0);
		return NULL;
	}
	else {
		t->next = NULL;
		t->data = x;
		return t;
	}
}
//2.單鏈表的尾插
void PushBack(node** plist, int x) {
	assert(plist);
	if (*plist == NULL) {
		*plist = Creatnode(x);
	}
	else {
		node* p = *plist;
		while (p->next) {
			p = p->next;
		}
		p->next = Creatnode(x);
	}
}
//3.單鏈表的打印
void Printlist(node** plist) {
	assert(plist);
	node* p =* plist;
	while (p) {
		printf("%d ", p->data);
		p = p->next;
	}
}
//4.單鏈表尾刪
void Popback(node** plist) {
	assert(plist);
	if (*plist == NULL) {
		return NULL;
	}
	node* p = *plist;
	node* q = NULL;
	while (p->next) {
		q = p;
		p = p->next;
	}
	q->next =NULL;
	free(p);
}
//5.單鏈表的頭插
void PushFront(node** plist, int x) {
	assert(plist);
	node* t = Creatnode(x);
	if (NULL == *plist) {
		*plist = t;
	}
	else {
		t->next = *plist;
		*plist = t;
	}
}
//6.單鏈表的頭刪
void PopFrount(node** plist) {
	assert(plist);
	if (plist == NULL) {
		return NULL;
	}
	else {
		node* p = *plist;
		*plist = p->next;
		free(p);
	}
}
//7.單鏈表的查找
node* Findpos(node* plist, int x) {
	node* cur = plist;
	while (cur) {
		if (cur->data == x) {
			return cur;
		}
		cur = cur->next;
	}
	return NULL;
}
//8.單鏈表在pos位置之后插入x
void Insertlinstafter(node* pos, int x) {
	assert(pos);
	if (NULL == pos) {
		return ;
	}
	node* t = Creatnode(x);
	t->next = pos->next;
	pos->next = t;
}
//9.單鏈表刪除pos位置之后的元素
void PopPosAfter(node* pos) {
	assert(pos);
	if (pos->next == NULL) {
		return;
	}
	else{
		node* p = pos->next;
		pos->next = p->next;
		free(p);
	}
}
//10.單鏈表的銷毀
void Destorylist(node** plist) {
	assert(plist);
	node* p = *plist;
	while (p) {
		*plist = p->next;
		free(p);
		p = *plist;
	}
	*plist = NULL;
}
 
void test1() {
	node* plist=NULL;//創(chuàng)建頭指針
	PushBack(&plist, 1);//尾插元素
	PushBack(&plist, 2);
	PushBack(&plist, 3);
	PushBack(&plist, 4);
	PushBack(&plist, 5);
	Printlist(&plist);//打印鏈表元素  1 2 3 4 5 
	printf("\n");
	Popback(&plist); //尾刪元素      
	PushFront(&plist, 0);//首插元素0    
	Printlist(&plist);//打印鏈表   0 1 2 3 4
	printf("\n");
	PopFrount(&plist);//首刪元素0  
	Printlist(&plist);//打印鏈表   1 2 3 4
	printf("\n");
	Findpos(plist,1);//尋找鏈表中1的地址,不方便演示,下面會(huì)演示
	Insertlinstafter(Findpos(plist, 4), 5);//在4后面插入5,用到上面的Findpos函數(shù)
	Printlist(&plist);//打印鏈表   1 2 3 4 5
	printf("\n");
	PopPosAfter(Findpos(plist, 4));//刪除指定位置后面的元素(刪除4后面的5)
	Printlist(&plist);//打印鏈表    1 2 3 4
	printf("\n");
	Destorylist(&plist);//銷毀鏈表
	Printlist(&plist);//打印鏈表
}
void test() {
	test1();
}
int main() {
	test();
	return 0;
}

3.測(cè)試結(jié)果:

a.先創(chuàng)建了頭指針plist

b.尾插1 2 3 4 5

c. 尾刪元素5

d.首插元素0

e.首刪元素0

f.在元素4 后面插入5

g.刪除4元素后面的5

h.銷毀鏈表

到此這篇關(guān)于C語言實(shí)現(xiàn)單鏈表的基本功能詳解的文章就介紹到這了,更多相關(guān)單鏈表基本功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)文件版通訊錄的代碼分享

    C語言實(shí)現(xiàn)文件版通訊錄的代碼分享

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)一個(gè)文件版通訊錄,主要運(yùn)用了結(jié)構(gòu)體,一維數(shù)組,函數(shù),分支與循環(huán)語句等等知識(shí),需要的可以參考一下
    2023-01-01
  • 詳解C++編譯器優(yōu)化技術(shù)

    詳解C++編譯器優(yōu)化技術(shù)

    現(xiàn)代編譯器缺省會(huì)使用RVO(return value optimization,返回值優(yōu)化)、NRVO(named return value optimization、命名返回值優(yōu)化)和復(fù)制省略(Copy elision)技術(shù),來減少拷貝次數(shù)來提升代碼的運(yùn)行效率。
    2021-06-06
  • C語言實(shí)現(xiàn)的循環(huán)單鏈表功能示例

    C語言實(shí)現(xiàn)的循環(huán)單鏈表功能示例

    這篇文章主要介紹了C語言實(shí)現(xiàn)的循環(huán)單鏈表功能,結(jié)合實(shí)例形式分析了基于C語言實(shí)現(xiàn)的循環(huán)單鏈表定義、創(chuàng)建、添加、刪除、打印、排序等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • C語言結(jié)構(gòu)體成員賦值的深拷貝與淺拷貝詳解

    C語言結(jié)構(gòu)體成員賦值的深拷貝與淺拷貝詳解

    C語言中的淺拷貝是指在拷貝過程中,對(duì)于指針型成員變量只拷貝指針本身,而不拷貝指針?biāo)赶虻哪繕?biāo),它按字節(jié)復(fù)制的。深拷貝除了拷貝其成員本身的值之外,還拷貝成員指向的動(dòng)態(tài)內(nèi)存區(qū)域內(nèi)容。本文將通過示例和大家詳細(xì)說說C語言的深拷貝與淺拷貝,希望對(duì)你有所幫助
    2022-09-09
  • C語言的數(shù)據(jù)變量、常量、數(shù)據(jù)類型及使用示例詳解

    C語言的數(shù)據(jù)變量、常量、數(shù)據(jù)類型及使用示例詳解

    本文介紹了C語言中的變量、常量、數(shù)據(jù)類型關(guān)鍵字以及如何使用這些數(shù)據(jù)類型,主要內(nèi)容包括變量和常量的定義與使用、基本數(shù)據(jù)類型關(guān)鍵字,感興趣的朋友一起看看吧
    2025-03-03
  • C++數(shù)據(jù)結(jié)構(gòu)之搜索二叉樹的實(shí)現(xiàn)

    C++數(shù)據(jù)結(jié)構(gòu)之搜索二叉樹的實(shí)現(xiàn)

    了解搜索二叉樹是為了STL中的map和set做鋪墊,我們所熟知的AVL樹和平衡搜索二叉樹也需要搜索二叉樹的基礎(chǔ)。本文將詳解如何利用C++實(shí)現(xiàn)搜索二叉樹,需要的可以參考一下
    2022-05-05
  • C++筆記之std::future的用法小結(jié)

    C++筆記之std::future的用法小結(jié)

    std::future通常由某個(gè)Provider創(chuàng)建,與std::async一起使用,本文主要介紹了C++筆記之std::future的用法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • C++如何有效地利用命名空間

    C++如何有效地利用命名空間

    談到C++編程中的模塊化和組織性時(shí),命名空間(Namespace)是一個(gè)重要的概念,所以本文主要來和大家聊聊C++命名空間的概念、用法以及如何有效地利用它來管理代碼,有需要的可以參考下
    2023-09-09
  • C語言數(shù)組全面總結(jié)梳理

    C語言數(shù)組全面總結(jié)梳理

    在C語言和C++等語言中,數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲(chǔ)類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組比較適合用來指向若干個(gè)字符串,使字符串處理更加方便、靈活
    2022-02-02
  • C++實(shí)現(xiàn)將s16le的音頻流轉(zhuǎn)換為float類型

    C++實(shí)現(xiàn)將s16le的音頻流轉(zhuǎn)換為float類型

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)將s16le的音頻流轉(zhuǎn)換為float類型,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04

最新評(píng)論

民权县| 绥阳县| 修武县| 牙克石市| 浦北县| 石河子市| 彩票| 玉田县| 高清| 色达县| 会宁县| 时尚| 蓝山县| 大同县| 澄迈县| 尉氏县| 根河市| 西华县| 云南省| 包头市| 黑山县| 五指山市| 黑山县| 禹州市| 太白县| 兰溪市| 宝兴县| 平顶山市| 内江市| 沅江市| 漳浦县| 封丘县| 钟祥市| 无为县| 图们市| 盖州市| 平山县| 大兴区| 琼结县| 玉环县| 姜堰市|