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

詳解C語言之堆棧

 更新時間:2021年11月17日 15:24:04   作者:ぃ咔哇依°ヽ  
這篇文章主要為大家介紹了C語言的堆棧,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

一、何為堆棧?

a.堆棧是一種特殊的線性表

b.堆棧的數(shù)據(jù)元素以及數(shù)據(jù)元素間的邏輯關(guān)系和線性表完全相同,其不同點是:線性表允許在任意位置插入和刪除數(shù)據(jù)元素,但堆棧只允許在固定一端進行插入和刪除數(shù)據(jù)元素,所以棧又稱為“先進后出”(FILO)或“后進先出”(LIFO)的線性表

c.堆棧中允許進行插入和刪除數(shù)據(jù)元素的一端稱為棧頂,另一端稱為棧底

d.堆棧的插入操作通常稱為進棧或入棧;堆棧的刪除操作通常稱為出棧或退棧

堆棧

二、思維導圖

堆棧

三、代碼

1、順序堆棧

#include <stdio.h>
typedef int DataType;
#define MaxStackSize 64
typedef struct
{
	DataType stack[MaxStackSize];
	int top;
}SeqStack;
//初始化
void StackInit(SeqStack *S)
{
	S->top = 0;
}
//判斷是否棧空
int StackIsEmpty(SeqStack S)
{
	if (S.top <= 0)
		return 0;
	else
		return 1;
}
//入棧
int StackPush(SeqStack *S, DataType x)
{
	if (S->top >= MaxStackSize)
	{
		printf("棧滿,無法進棧!??!\n");
		return 0;
	}
	else
	{
		S->stack[S->top] = x;
		S->top++;
		return 1;
	}
}
//出棧
int StackPop(SeqStack *S, DataType *x)
{
	if (S->top <= 0)
	{
		printf("堆棧已空,無法出棧?。?!\n");
		return 0;
	}
	else
	{
		S->top--;
		*x = S->stack[S->top];
		return 1;
	}
}
//獲取棧頂元素
int StackGetTop(SeqStack S, DataType *x)
{
	if (S.top <= 0)
	{
		printf("堆棧已空?。。n");
			return 0;
	}
	else
	{
		*x = S.stack[S.top - 1];
		return 1;
	}
}
int main()
{
	SeqStack myStack;
	int i, x;
	StackInit(&myStack);
	for (i = 0; i < 10; i++)
		StackPush(&myStack, i + 1);
	StackGetTop(myStack, &x);
	printf("當前棧頂元素為:%d\n", x);
	printf("依次出棧:");
	while (StackIsEmpty(myStack))
	{
		StackPop(&myStack, &x);
		printf("%d ", x);
	}
	system("pause");
	return 0;
}

2、鏈式堆棧

#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
typedef struct snode
{
	DataType data;
	struct snode *next;
}LSNode;
//初始化
void StackInit(LSNode **top)
{
	*top = (LSNode *)malloc(sizeof(LSNode));
	(*top)->next = NULL;
}
//判斷堆棧是否非空
int StackIsEmpty(LSNode *top)
{
	if (top->next == NULL)
		return 0;
	else
		return 1;
}
//入棧
void StackPush(LSNode *top, DataType x)
{
	LSNode *p;
	p = (LSNode *)malloc(sizeof(LSNode));
	p->data = x;
	p->next = top->next;
	top->next = p;
}
//出棧
int StackPop(LSNode *top, DataType *x)
{
	LSNode *p = top->next;
	if (p == NULL)
	{
		printf("堆棧已空,刪除錯誤?。?!\n");
		return 0;
	}
	top->next = p->next;
	*x = p->data;
	free(p);
	return 1;
}
//獲取棧頂元素
int StackGetTop(LSNode *top, DataType *x)
{
	LSNode *p = top->next;
	if (p == NULL)
	{
		printf("堆棧已空,取出錯誤!??!\n");
		return 0;
	}
	*x = p->data;
	return 1;
}
//釋放內(nèi)存空間
void StackDestroy(LSNode **top)
{
	LSNode *p, *q;
	p = *top;
	while (p != NULL)
	{
		q = p;
		p = p->next;
		free(q);
	}
	*top = NULL;
}
int main()
{
	int i, x;
	LSNode *top;
	StackInit(&top);
	for (i = 0; i < 10; i++)
		StackPush(top, i + 1);
	StackGetTop(top, &x);
	printf("當前棧頂元素為%d\n", x);
	printf("依次出棧:");
	while (StackIsEmpty(top))
	{
		StackPop(top, &x);
		printf("%4d", x);
	}
	StackDestroy(&top);
	system("pause");
	return 0;
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • c++的virtual和override作用及說明

    c++的virtual和override作用及說明

    這篇文章主要介紹了c++的virtual和override作用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • c++大數(shù)階乘的實現(xiàn)方法

    c++大數(shù)階乘的實現(xiàn)方法

    本篇文章對c++的大數(shù)階乘進行了代碼示例的介紹。需要的朋友參考下
    2013-05-05
  • Qt實現(xiàn)圖片移動實例(圖文教程)

    Qt實現(xiàn)圖片移動實例(圖文教程)

    這學期實訓的時候用MFC做過一個飛機大戰(zhàn),很無聊的東西,一直想用Qt做一個;首先需要解決的問題是圖片的移動,怎么說飛機啊子彈啊都是動著的,圖片當然要跑起來,感興趣的你可不要走開啊
    2013-01-01
  • 一波C語言二元查找樹算法題目解答實例匯總

    一波C語言二元查找樹算法題目解答實例匯總

    這篇文章主要介紹了一波C語言二元查找樹算法題目解答實例匯總,包括按層次遍歷和轉(zhuǎn)換為鏡像等基本算法題目,需要的朋友可以參考下
    2016-03-03
  • OpenMP 共享內(nèi)存的并行編程框架入門詳解

    OpenMP 共享內(nèi)存的并行編程框架入門詳解

    這篇文章主要為大家介紹了OpenMP 共享內(nèi)存的并行編程框架入門詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • C++中賦值初始化和直接初始化的區(qū)別

    C++中賦值初始化和直接初始化的區(qū)別

    賦值初始化和直接初始化雖然常常產(chǎn)生相同的結(jié)果,但在某些情況下它們有不同的含義和行為,本文主要介紹了C++中賦值初始化和直接初始化的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • 詳解Matlab如何繪制?;鶊D

    詳解Matlab如何繪制?;鶊D

    桑基圖是一種特定類型的流程圖,圖中延伸的分支的寬度對應數(shù)據(jù)流量的大小,通常應用于能源、材料成分、金融等數(shù)據(jù)的可視化分析。本文將用Matlab繪制好看的?;鶊D,需要的可以參考一下
    2022-03-03
  • 詳解C語言中的ttyname()函數(shù)和isatty()函數(shù)的用法

    詳解C語言中的ttyname()函數(shù)和isatty()函數(shù)的用法

    這篇文章主要介紹了C語言中的ttyname()函數(shù)和isatty()函數(shù)的用法,是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • Qt重寫QStackedWidget模擬實現(xiàn)home界面滑動效果

    Qt重寫QStackedWidget模擬實現(xiàn)home界面滑動效果

    這篇文章主要為大家詳細介紹了Qt如何通過重寫QStackedWidget模擬實現(xiàn)home界面滑動效果,文中的實現(xiàn)過程講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-11-11
  • C語言實現(xiàn)英文單詞助手

    C語言實現(xiàn)英文單詞助手

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)單詞小助手,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評論

高尔夫| 阿瓦提县| 突泉县| 花垣县| 尼玛县| 台江县| 大英县| 新野县| 江油市| 辛集市| 巴东县| 简阳市| 丹阳市| 锡林郭勒盟| 玉山县| 偃师市| 高台县| 乌海市| 喀什市| 乌兰浩特市| 丹棱县| 阿坝县| 宜章县| 阿坝| 沁源县| 昌黎县| 元朗区| 常州市| 密山市| 城固县| 临沧市| 甘肃省| 田林县| 宁南县| 宜黄县| 大连市| 和龙市| 屏东市| 和静县| 山西省| 涪陵区|