最新国产好看的视频,伊人天堂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.堆棧的插入操作通常稱為進?;蛉霔?;堆棧的刪除操作通常稱為出?;蛲藯?br />

堆棧

二、思維導(dǎo)圖

堆棧

三、代碼

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āng)前棧頂元素為:%d\n", x);
	printf("依次出棧:");
	while (StackIsEmpty(myStack))
	{
		StackPop(&myStack, &x);
		printf("%d ", x);
	}
	system("pause");
	return 0;
}

2、鏈?zhǔn)蕉褩?/h3>
#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āng)前棧頂元素為%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)圖片移動實例(圖文教程)

    這學(xué)期實訓(xùn)的時候用MFC做過一個飛機大戰(zhàn),很無聊的東西,一直想用Qt做一個;首先需要解決的問題是圖片的移動,怎么說飛機啊子彈啊都是動著的,圖片當(dāng)然要跑起來,感興趣的你可不要走開啊
    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如何繪制桑基圖

    詳解Matlab如何繪制桑基圖

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

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

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

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

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

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

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

最新評論

娄底市| 托克逊县| 阜宁县| 金阳县| 明水县| 玉屏| 洪湖市| 贺州市| 北流市| 三河市| 桑植县| 家居| 万宁市| 和静县| 榆社县| 昆明市| 淮滨县| 木里| 东台市| 明光市| 南雄市| 静海县| 漳平市| 永嘉县| 井陉县| 邯郸市| 阿坝| 新乡市| 资溪县| 专栏| 陵水| 江阴市| 行唐县| 神木县| 灌南县| 诸城市| 黎川县| 民县| 洮南市| 都安| 贵南县|