亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解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++讀寫INI配置文件的類實例

    C++讀寫INI配置文件的類實例

    這篇文章主要介紹了C++讀寫INI配置文件的類,實例分析了C++操作ini配置文件的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C語言實現(xiàn)像素鳥游戲

    C語言實現(xiàn)像素鳥游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)像素鳥游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語言 用指針作為函數(shù)返回值詳解

    C語言 用指針作為函數(shù)返回值詳解

    本文主要介紹C語言 用指針作為函數(shù)返回值,這里整理了相關(guān)資料及示例代碼,幫助大家學(xué)習(xí)理解此部分知識,有需要的同學(xué)可以參考下
    2016-08-08
  • C++類型轉(zhuǎn)換詳解

    C++類型轉(zhuǎn)換詳解

    類型轉(zhuǎn)換有c風(fēng)格的,當(dāng)然還有c++風(fēng)格的。c風(fēng)格的轉(zhuǎn)換的格式很簡單(TYPE)EXPRESSION,但是c風(fēng)格的類型轉(zhuǎn)換有不少的缺點,有的時候用c風(fēng)格的轉(zhuǎn)換是不合適的,因為它可以在任意類型之間轉(zhuǎn)換
    2021-10-10
  • C/C++獲取主機網(wǎng)卡MAC地址的三方法

    C/C++獲取主機網(wǎng)卡MAC地址的三方法

    MAC地址(Media Access Control address),又稱為物理地址或硬件地址,是網(wǎng)絡(luò)適配器(網(wǎng)卡)在制造時被分配的全球唯一的48位地址,通過獲取MAC地址可以判斷當(dāng)前主機的唯一性可以與IP地址綁定并實現(xiàn)網(wǎng)絡(luò)準(zhǔn)入控制,本文給大家介紹了使用C/C++獲取主機網(wǎng)卡MAC地址的三方法
    2023-11-11
  • Qt槽函數(shù)會被執(zhí)行多次的問題原因及解決方法

    Qt槽函數(shù)會被執(zhí)行多次的問題原因及解決方法

    本文主要介紹了Qt槽函數(shù)會被執(zhí)行多次的問題原因及解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • C++中的繼承方式與菱形繼承解析

    C++中的繼承方式與菱形繼承解析

    這篇文章主要介紹了C++中的繼承方式與菱形繼承解析,繼承是類和類之間的關(guān)系,是代碼復(fù)用的重要手段,允許在保持原有類結(jié)構(gòu)的基礎(chǔ)上進行擴展,創(chuàng)建的新類與原有的類類似,只是多了幾個成員變量和成員函數(shù),需要的朋友可以參考下
    2023-08-08
  • c語言文件讀寫示例(c語言文件操作)

    c語言文件讀寫示例(c語言文件操作)

    這篇文章主要介紹了c語言文件讀寫示例(c語言文件操作),需要的朋友可以參考下
    2014-02-02
  • C語言的入口函數(shù)的實現(xiàn)

    C語言的入口函數(shù)的實現(xiàn)

    在C語言的世界里,所有的程序都是用函數(shù)來裝配的,main稱之為主函數(shù),是所有程序運行的入口,本文主要介紹了C語言的入口函數(shù),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • c++先序二叉樹的構(gòu)建詳解

    c++先序二叉樹的構(gòu)建詳解

    在本篇文章里小編給大家分享了關(guān)于c++先序二叉樹的構(gòu)建的相關(guān)知識點,需要的朋友們跟著學(xué)習(xí)下。
    2019-04-04

最新評論