中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中怎么實現鏈棧

發布時間:2021-05-20 12:01:34 來源:億速云 閱讀:148 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關C語言中怎么實現鏈棧,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

鏈棧圖解

C語言中怎么實現鏈棧

鏈棧的常規操作

/********************* 鏈棧的常規操作 ****************************/

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

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

定義鏈棧結構體

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


#define TRUE  1
#define FALSE 0

typedef int ElemType;		// 鏈棧存儲元素的數據類型


/*
 *	定義鏈棧結構體
*/
typedef struct Node{
	ElemType data;			// 棧結點數據域
	struct Node *next;		// 棧結點指針域
}*LinkStack, Node;

初始化鏈棧

// 初始化鏈棧(帶頭結點的鏈棧)
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;
}

因為是鏈式存儲結構,無需鏈棧判滿。

計算鏈棧的長度

/*
 *	求鏈棧長度(棧中元素個數)
 *  s 鏈棧
*/
int StackLength(LinkStack s){
	LinkStack p;
	int len = 0;
	if(StackEmpty(s)){
		return FALSE;
	}
	p = s -> next;	// 帶頭結點的鏈棧要先移動一下
	while(p != NULL){
		len ++;
		p = p -> next;
	}
	return len;
}

鏈棧入棧(Push)

/*
 *	入棧 壓棧
 *  s 鏈棧
 *  data 入棧數據
*/
int Push(LinkStack s, ElemType data){
	// 分配入棧結點
	Node *new_node = (Node *)malloc(sizeof(struct Node));
	if (new_node == NULL) return FALSE;		// 結點分配失敗
	
	// 跟單鏈表一樣使用頭插法
	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;	// 訪問棧頂結點
	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};

	// 動態計算入棧元素個數
	int len = sizeof(datas) / sizeof(datas[0]);	

	// for循環依次入棧
	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;
}

結果如下:

StackEmpty():1
StackLength():0

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

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

C語言是什么

C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用于底層開發,使用C語言可以以簡易的方式編譯、處理低級存儲器。

關于“C語言中怎么實現鏈棧”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

琼中| 金山区| 磐石市| 苍山县| 岳普湖县| 台安县| 泌阳县| 仙居县| 遵义县| 长武县| 靖边县| 神木县| 松潘县| 夏邑县| 温州市| 闵行区| 文水县| 鲁甸县| 宁蒗| 永仁县| 苏尼特右旗| 高州市| 扶绥县| 新巴尔虎右旗| 阳谷县| 房产| 金寨县| 南部县| 丰县| 句容市| 兴文县| 奎屯市| 灯塔市| 齐河县| 乐陵市| 错那县| 靖州| 宁河县| 永和县| 临猗县| 城固县|