欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

鏈棧圖解

鏈棧的常規(guī)操作

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

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

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

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

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


#define TRUE  1
#define FALSE 0

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


/*
 *	定義鏈棧結(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),無需鏈棧判滿。

計(jì)算鏈棧的長度

/*
 *	求鏈棧長度(棧中元素個(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;	// 訪問棧頂結(jié)點(diǎn)
	data = top -> data;	// 取出棧頂元素
	s -> next = top -> next;
	free(top);			// 釋放棧頂空間
	return data;
}

鏈棧各操作測試

// 程序主入口
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,歡迎大家來訪。

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

相關(guān)文章

  • 在C++中關(guān)于友元函數(shù)的進(jìn)一步理解

    在C++中關(guān)于友元函數(shù)的進(jìn)一步理解

    今天小編就為大家分享一篇關(guān)于在C++中關(guān)于友元函數(shù)的進(jìn)一步理解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • c語言:基于函數(shù)指針的兩個(gè)示例分析

    c語言:基于函數(shù)指針的兩個(gè)示例分析

    本篇文章是對(duì)c語言中函數(shù)指針的兩個(gè)示例做了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解C++編程中類模板的相關(guān)使用知識(shí)

    詳解C++編程中類模板的相關(guān)使用知識(shí)

    這篇文章主要介紹了詳解C++編程中類模板的相關(guān)使用知識(shí),包括函數(shù)的參數(shù)類型替換等方法,需要的朋友可以參考下
    2015-09-09
  • C語言判斷字符是否為可打印字符的方法

    C語言判斷字符是否為可打印字符的方法

    這篇文章主要介紹了C語言判斷字符是否為可打印字符的方法,分別為isprint()函數(shù)和isgraph()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • 超級(jí)詳細(xì)講解C++中的多態(tài)

    超級(jí)詳細(xì)講解C++中的多態(tài)

    多態(tài)是在不同繼承關(guān)系的類對(duì)象,去調(diào)同一函數(shù),產(chǎn)生了不同的行為,下面這篇文章主要給大家介紹了關(guān)于C++中多態(tài)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • C++編程中刪除運(yùn)算符與相等運(yùn)算符的使用解析

    C++編程中刪除運(yùn)算符與相等運(yùn)算符的使用解析

    這篇文章主要介紹了C++編程中刪除運(yùn)算符與相等運(yùn)算符的使用解析,delete和==以及!=運(yùn)算符的使用是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-01-01
  • c++只保留float型的小數(shù)點(diǎn)后兩位問題

    c++只保留float型的小數(shù)點(diǎn)后兩位問題

    這篇文章主要介紹了c++只保留float型的小數(shù)點(diǎn)后兩位問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++模擬2D牛頓力學(xué)效果的示例代碼

    C++模擬2D牛頓力學(xué)效果的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C++模擬2D牛頓力學(xué)效果,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-06-06
  • 一文帶你搞懂C++中的流量控制

    一文帶你搞懂C++中的流量控制

    限流可以認(rèn)為服務(wù)降級(jí)的一種,限流就是限制系統(tǒng)的輸入和輸出流量已達(dá)到保護(hù)系統(tǒng)的目的,這篇文章小編就來帶大家深入了解一下如何利用C++實(shí)現(xiàn)流量控制吧
    2023-10-10
  • C++ 數(shù)據(jù)共享與保護(hù)

    C++ 數(shù)據(jù)共享與保護(hù)

    C++ 數(shù)據(jù)共享與保護(hù)的基本概念,包括標(biāo)識(shí)符的作用域與可見性,對(duì)象生存期,類數(shù)據(jù)的共享,類共享數(shù)據(jù)的保護(hù)。本篇文章就介紹C++ 數(shù)據(jù)共享與保護(hù),需要的朋友可以參考一下
    2021-10-10

最新評(píng)論