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

C語(yǔ)言實(shí)現(xiàn)鏈棧的步驟

 更新時(shí)間:2021年05月20日 10:22:03   作者:憶想不到的暉  
鏈棧是棧的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),鏈棧可以用單鏈表的頭插法實(shí)現(xiàn),本文主要講述了如何用c語(yǔ)言去實(shí)現(xiàn)鏈棧,感興趣的朋友可以了解下

鏈棧圖解

鏈棧的常規(guī)操作

/********************* 鏈棧的常規(guī)操作 ****************************/

LinkStack 	 InitLinkStack();			// 初始化鏈棧
int   	 	 StackEmpty();				// 判斷鏈???
int   	 	 StackLength();				// 求鏈棧長(zhǎng)(鏈棧元素個(gè)數(shù))
int    		 Push();					// 入棧 壓棧
ElemType 	 Pop();						// 出棧 彈棧
void 	 	 DestroyStack();			// 銷(xiāo)毀鏈棧

/***************************************************************/

定義鏈棧結(jié)構(gòu)體

#include "stdio.h"
#include "malloc.h"


#define TRUE  1
#define FALSE 0

typedef int ElemType;		// 鏈棧存儲(chǔ)元素的數(shù)據(jù)類(lèi)型


/*
 *	定義鏈棧結(jié)構(gòu)體
*/
typedef struct Node{
	ElemType data;			// 棧結(jié)點(diǎn)數(shù)據(jù)域
	struct Node *next;		// 棧結(jié)點(diǎn)指針域
}*LinkStack, Node;

初始化鏈棧

// 初始化鏈棧(帶頭結(jié)點(diǎn)的鏈棧)
LinkStack InitLinkStack(){
	LinkStack s = (LinkStack)malloc(sizeof(struct Node));
	s -> next = NULL;
	return s;
}

鏈棧判空

/*
 *	判斷鏈棧是否空
 *  s 鏈棧
*/
int StackEmpty(LinkStack s){
	if(s == NULL){
		return FALSE;
	}
	return s -> next == NULL;
}

因?yàn)槭擎準(zhǔn)酱鎯?chǔ)結(jié)構(gòu),無(wú)需鏈棧判滿(mǎn)。

計(jì)算鏈棧的長(zhǎng)度

/*
 *	求鏈棧長(zhǎng)度(棧中元素個(gè)數(shù))
 *  s 鏈棧
*/
int StackLength(LinkStack s){
	LinkStack p;
	int len = 0;
	if(StackEmpty(s)){
		return FALSE;
	}
	p = s -> next;	// 帶頭結(jié)點(diǎn)的鏈棧要先移動(dòng)一下
	while(p != NULL){
		len ++;
		p = p -> next;
	}
	return len;
}

鏈棧入棧(Push)

/*
 *	入棧 壓棧
 *  s 鏈棧
 *  data 入棧數(shù)據(jù)
*/
int Push(LinkStack s, ElemType data){
	// 分配入棧結(jié)點(diǎn)
	Node *new_node = (Node *)malloc(sizeof(struct Node));
	if (new_node == NULL) return FALSE;		// 結(jié)點(diǎn)分配失敗
	
	// 跟單鏈表一樣使用頭插法
	new_node -> data = data;
	new_node -> next = s -> next;
	s -> next = new_node;
	return TRUE;
}

鏈棧出棧(Pop)

/*
 *	出棧 彈棧
 *	s 鏈棧
*/
ElemType Pop(LinkStack s){
	LinkStack top;
	ElemType data;
	// 判???
	if(StackEmpty(s)){
		return FALSE;
	}
	top = s -> next;	// 訪問(wèn)棧頂結(jié)點(diǎn)
	data = top -> data;	// 取出棧頂元素
	s -> next = top -> next;
	free(top);			// 釋放棧頂空間
	return data;
}

鏈棧各操作測(cè)試

// 程序主入口
int main(int argc, char const *argv[])
{
	LinkStack s = InitLinkStack();
	printf("StackEmpty():%d\n", StackEmpty(s));
	printf("StackLength():%d\n\n", StackLength(s));

	// 入棧元素
	ElemType datas[] = {1, 3, 5, 7, 9};

	// 動(dòng)態(tài)計(jì)算入棧元素個(gè)數(shù)
	int len = sizeof(datas) / sizeof(datas[0]);	

	// for循環(huán)依次入棧
	printf("Push():");
	for(int i = 0; i < len; i++){
		printf("%d\t", datas[i]);
		Push(s, datas[i]);
	}
	printf("\nStackEmpty():%d\n", StackEmpty(s));
	printf("StackLength():%d\n\n", StackLength(s));

	// 出棧 彈棧
	printf("Pop(): ");
	while(!StackEmpty(s)){
		printf("%d\t", Pop(s));
	}
	printf("\nStackEmpty():%d\n", StackEmpty(s));
	printf("StackLength():%d\n\n", StackLength(s));
	return 0;
}

結(jié)果如下:

StackEmpty():1
StackLength():0

Push():1        3       5       7       9
StackEmpty():0
StackLength():5

Pop(): 9        7       5       3       1
StackEmpty():1
StackLength():0

源代碼

源代碼已上傳到 GitHub Data-Structure-of-C,歡迎大家來(lái)訪。

以上就是C語(yǔ)言實(shí)現(xiàn)鏈棧的步驟的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言實(shí)現(xiàn)鏈棧的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++之std命名空間

    C++之std命名空間

    這篇文章主要介紹了C++之std命名空間使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++list的模擬實(shí)現(xiàn)

    C++list的模擬實(shí)現(xiàn)

    list是數(shù)據(jù)結(jié)構(gòu)中的鏈表,在C++的STL中,有l(wèi)ist的模板,STL中的list的結(jié)構(gòu)是帶頭雙向循環(huán)鏈表,當(dāng)然STL中還有一個(gè)forward_list的鏈表,這個(gè)鏈表是一個(gè)帶頭的單鏈表。為了更好的理解list,我們來(lái)對(duì)其進(jìn)行模擬實(shí)現(xiàn)。,需要的朋友可以參考
    2023-04-04
  • 淺談C++不同繼承之間的關(guān)系

    淺談C++不同繼承之間的關(guān)系

    本文主要介紹了淺談C++不同繼承之間的關(guān)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • C語(yǔ)言動(dòng)態(tài)內(nèi)存的分配實(shí)例詳解

    C語(yǔ)言動(dòng)態(tài)內(nèi)存的分配實(shí)例詳解

    動(dòng)態(tài)內(nèi)存管理同時(shí)還具有一個(gè)優(yōu)點(diǎn),當(dāng)程序在具有更多內(nèi)存的系統(tǒng)上需要處理更多數(shù)據(jù)時(shí),不需要重寫(xiě)程序,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言動(dòng)態(tài)內(nèi)存分配的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C++棧的數(shù)組實(shí)現(xiàn)代碼

    C++棧的數(shù)組實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++棧的數(shù)組實(shí)現(xiàn)方式,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Qt圖形圖像開(kāi)發(fā)之曲線(xiàn)圖模塊QCustomplot庫(kù)生成靜態(tài)、動(dòng)態(tài)曲線(xiàn)詳細(xì)教程圖解

    Qt圖形圖像開(kāi)發(fā)之曲線(xiàn)圖模塊QCustomplot庫(kù)生成靜態(tài)、動(dòng)態(tài)曲線(xiàn)詳細(xì)教程圖解

    這篇文章主要介紹了Qt圖形圖像開(kāi)發(fā)之曲線(xiàn)圖模塊QCustomplot庫(kù)畫(huà)靜態(tài)、動(dòng)態(tài)曲線(xiàn)詳細(xì)教程圖解,需要的朋友可以參考下
    2020-03-03
  • 求子數(shù)組最大和的實(shí)例代碼

    求子數(shù)組最大和的實(shí)例代碼

    求子數(shù)組最大和的實(shí)例代碼,需要的朋友可以參考一下
    2013-03-03
  • 通過(guò)C++程序示例理解設(shè)計(jì)模式中的外觀模式

    通過(guò)C++程序示例理解設(shè)計(jì)模式中的外觀模式

    這篇文章主要介紹了通過(guò)設(shè)計(jì)模式中的外觀模式及相關(guān)的C++程序示例,外觀模式在高層提供了一個(gè)統(tǒng)一的接口實(shí)現(xiàn)一定程度上的解耦,需要的朋友可以參考下
    2016-03-03
  • C語(yǔ)言實(shí)現(xiàn)飛機(jī)小游戲

    C語(yǔ)言實(shí)現(xiàn)飛機(jī)小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)飛機(jī)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列的實(shí)現(xiàn)詳解

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列的實(shí)現(xiàn)詳解

    隊(duì)列只允許在一端進(jìn)行插入數(shù)據(jù)操作,在另一端進(jìn)行刪除數(shù)據(jù)操作的特殊線(xiàn)性表,隊(duì)列具有先進(jìn)先出FIFO(First In First Out)的原則。本文將通過(guò)實(shí)例詳細(xì)說(shuō)說(shuō)隊(duì)列的實(shí)現(xiàn),需要的可以學(xué)習(xí)一下
    2022-10-10

最新評(píng)論

吉首市| 汉沽区| 肃南| 阿勒泰市| 开江县| 右玉县| 海城市| 稻城县| 扎赉特旗| 增城市| 蕲春县| 湄潭县| 平泉县| 高雄县| 湖口县| 灌云县| 玉山县| 聂荣县| 达孜县| 象州县| 元谋县| 杂多县| 阳东县| 法库县| 油尖旺区| 安陆市| 滦平县| 襄樊市| 金乡县| 南昌市| 平塘县| 富蕴县| 邵阳市| 邵阳县| 威信县| 仁化县| 弥渡县| 舒兰市| 分宜县| 汉川市| 泸溪县|