国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

棧的定義及基本操作實現(xiàn)(順序棧)

這篇具有很好參考價值的文章主要介紹了棧的定義及基本操作實現(xiàn)(順序棧)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

個人主頁:【??個人主頁】
系列專欄:【??數(shù)據(jù)結(jié)構(gòu)與算法】
學習名言:天子重英豪,文章教兒曹。萬般皆下品,惟有讀書高

系列文章目錄

第一章 ?? 學前知識
第二章 ?? 單向鏈表
第三章 ?? 遞歸



前言

相信大家小時后一定玩過玩具槍吧,在我們裝子彈時玩具槍的子彈只能從彈夾的一端進并且從同一端出來,這種特殊的結(jié)構(gòu)在我們數(shù)據(jù)結(jié)構(gòu)的世界稱為——


一.棧是什么???????

棧(stack )是限定僅在表尾進行插人或刪除操作的線性表。因此,對棧來說,表尾端有其特殊含義,稱為棧頂(top),相應地,表頭端稱為棧底( bttom)。不含元素的空表稱為空棧。
棧的定義及基本操作實現(xiàn)(順序棧)

假設(shè)棧S= (a1,a2,… , an),則稱a1為棧底元素,an為棧頂元素。棧中元素按a1, a2, …,an的次序進棧,退棧的第一個元素應為棧頂元素。換句話說,棧的修改是按后進先出的原則進行的,因此,棧又稱為后進先出( Last In First Out, LIFO) 的線性表。

二、棧與線性表的關(guān)系??????

棧是一種重要的線性結(jié)構(gòu)。從數(shù)據(jù)結(jié)構(gòu)角度看,棧也是線性表,其特殊性在于棧的基本操作是線性表操作的子集,它們是操作受限的線性表,因此,可稱為具有限定性的數(shù)據(jù)結(jié)構(gòu)。但從數(shù)據(jù)類型角度看,它是和線性表不相同的兩類重要的抽象數(shù)據(jù)類型。


三、棧的基本操作??????

1.棧的儲存結(jié)構(gòu)結(jié)構(gòu)??

typedef  int Elemtype;
typedef struct 
{
	Elemtype* top;//指向棧頂?shù)闹羔?/span>
	Elemtype* base;//指向棧底的指針
	int log;//存儲當前棧的最大容量
}snake;

2.棧的初始化?

void Creat(snake* a)
{
	a->base = (Elemtype*)malloc(sizeof(int) * MAX);//
	if (a == NULL)
		exit(0);
	a->top = a->base;
	a->log = MAX;
}

3. 入棧??

void Push(snake* a, Elemtype o)
{
	if (a->top - a->base >= a->log)//如果棧已滿則需擴容
	{
		a->base = (Elemtype*)realloc(a->base, sizeof(Elemtype) * (a->log + MAX));//擴充到原來的一倍
		a->top = a->log + MAX;//重新指向未增容前的棧頂
		a->log = a->log + MAX;//記入擴大前的容量
		if (!a->base)
			exit(0);
	}
	*(a->top) =o;//賦值
	a->top++;//指向下一個
}

4.出棧??

Elemtype pop(snake* a, Elemtype *e)
{
	if (a->top == a->base)
		return 0;//棧已空
	*e = *--(a->base);//先指向棧的第一個元素,并取出元素
	return *e;//返回
}

5.清空與銷毀??

void QingKong(snake* a)
{

	a->top = a->base;
	a->log = MAX;
}//清空一個棧,棧本身沒有消失
void Destroy(snake* a)
{
	int i, len;
	len = a->log;
	for (i = 0;i < len;i++)
	{
		free(a->base);
		a->base++;
	}
	a->base = a->top = NULL;
	a->log = 0;
}


總結(jié)??????

順序棧是指利用順序存儲結(jié)構(gòu)實現(xiàn)的棧,即利用一組 地址連續(xù)的存儲單元依次存放自棧底到棧頂?shù)臄?shù)據(jù)元素,同時附設(shè)指針top指示棧頂元素在順序棧中的位置。通常習慣的做法是:以top= 0表示空棧,鑒于C語言中數(shù)組的下標約定從0開始,則當以C語言作描述語言時,如此設(shè)定會帶來很大不便,因此另設(shè)指針base指示棧底元素在順序棧中的位置。當top和base的值相等時,表示空棧。

#include<string.h>
#include<stdlib.h>
#define MAX 100//一次的最大容量
typedef  int Elemtype;
typedef struct 
{
	Elemtype* top;//指向棧頂?shù)闹羔?/span>
	Elemtype* base;//指向棧底的指針
	int log;//存儲當前棧的最大容量
}snake;
void Creat(snake* a)
{
	a->base = (Elemtype*)malloc(sizeof(int) * MAX);//
	if (a == NULL)
		exit(0);
	a->top = a->base;
	a->log = MAX;
}
void Push(snake* a, Elemtype o)
{
	if (a->top - a->base >= a->log)//如果棧已滿則需擴容
	{
		a->base = (Elemtype*)realloc(a->base, sizeof(Elemtype) * (a->log + MAX));//擴充到原來的一倍
		a->top = a->log + MAX;//重新指向未增容前的棧頂
		a->log = a->log + MAX;//記入擴大前的容量
		if (!a->base)
			exit(0);
	}
	*(a->top) =o;//賦值
	a->top++;//指向下一個
}
Elemtype pop(snake* a, Elemtype *e)
{
	if (a->top == a->base)
		return 0;//棧已空
	*e = *--(a->base);//先指向棧的第一個元素,并取出元素
	return *e;//返回
}
void QingKong(snake* a)
{

	a->top = a->base;
	a->log = MAX;
}//清空一個棧,棧本身沒有消失
void Destroy(snake* a)
{
	int i, len;
	len = a->log;
	for (i = 0;i < len;i++)
	{
		free(a->base);
		a->base++;
	}
	a->base = a->top = NULL;
	a->log = 0;
}
int Snakelen(snake* a)
{
	return (a->top - a->top);
}//計算棧的當前容量
int main()
{
	snake* a;//創(chuàng)建棧
	Creat(a);//賦值
	return 0;
}

(文章中圖片與部分內(nèi)容來源與網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系刪除)
棧的定義及基本操作實現(xiàn)(順序棧)文章來源地址http://www.zghlxwxcb.cn/news/detail-405114.html

到了這里,關(guān)于棧的定義及基本操作實現(xiàn)(順序棧)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】順序棧的基本操作:出棧、入棧、取棧頂元素、輸出所有棧中元素、括號匹配題目

    【數(shù)據(jù)結(jié)構(gòu)】順序棧的基本操作:出棧、入棧、取棧頂元素、輸出所有棧中元素、括號匹配題目

    棧是限定僅在表位進行插入或刪除操作的線性表。棧的表尾稱為棧頂,表頭稱為棧底。不含元素的棧稱為空棧。 左圖為棧的示意圖,右圖為用鐵路調(diào)度表示棧。 如下是入棧至棧滿再進行出棧的過程示意圖。值得注意的是,棧滿后,top指針指向的不是頂端元素,而是頂端的下

    2024年02月07日
    瀏覽(26)
  • 順序棧的基本操作(存儲結(jié)構(gòu)設(shè)計、初始化、判空、判滿、入棧、出棧、取棧頂元素、遍歷輸出棧內(nèi)元素)

    順序棧的基本操作(存儲結(jié)構(gòu)設(shè)計、初始化、判空、判滿、入棧、出棧、取棧頂元素、遍歷輸出棧內(nèi)元素)

    以上為總的代碼,對于棧滿時存在一些問題待改進 ———————————————————————————————————————— 以下為代碼編寫過程,有參考網(wǎng)上大佬的代碼 ? 創(chuàng)建棧后報錯,在scanf_s處缺少符號? 會執(zhí)行兩遍創(chuàng)建棧? ? 在主函數(shù)里邊確實有兩

    2024年02月05日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu) 線性表的定義和基本操作(以順序表為例)

    數(shù)據(jù)結(jié)構(gòu) 線性表的定義和基本操作(以順序表為例)

    名人說:一花獨放不是春,百花齊放花滿園?!对鰪V賢文》 作者:Code_流蘇(CSDN) (一個喜歡古詩詞和編程的Coder??) 以下代碼個人分享出來,僅供學習交流,且僅在CSDN平臺發(fā)布,未經(jīng)授權(quán)禁止二次轉(zhuǎn)發(fā)。 〇、線性表是什么? 1、定義 線性表 是具有 相同數(shù)據(jù)類型 的 n(

    2024年02月12日
    瀏覽(102)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表(一)線性表的定義及其基本操作(順序表插入、刪除、查找、修改)

    【數(shù)據(jù)結(jié)構(gòu)】線性表(一)線性表的定義及其基本操作(順序表插入、刪除、查找、修改)

    目錄 一、線性表 1. 線性表的定義 2. 線性表的要素 二、線性表的基本操作 三、線性表的順序存儲結(jié)構(gòu) 1. 定義 2. 順序表的操作? ? ?? a. 插入操作 b. 刪除操作 c. 查找操作 d. 修改操作 e. 代碼實例 ??????? ?一個線性表是由零個或多個 具有相同類型的結(jié)點 組成的有序集合。

    2024年02月03日
    瀏覽(98)
  • 【Java】實現(xiàn)順序表基本的操作(數(shù)據(jù)結(jié)構(gòu))

    【Java】實現(xiàn)順序表基本的操作(數(shù)據(jù)結(jié)構(gòu))

    在了解順序表之前我們要先了解什么是線性表,線性表(linear list)是n個具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實際中廣泛使用的數(shù)據(jù)結(jié)構(gòu),常見的線性表:順序表、鏈表、棧、隊列… 線性表在邏輯上是線性結(jié)構(gòu),也就說是連續(xù)的一條直線。但是在物理結(jié)構(gòu)

    2024年02月03日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)教程實驗一順序表基本操作的實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)教程實驗一順序表基本操作的實現(xiàn)

    1.掌握線性表的順序存貯結(jié)構(gòu)及基本操作,深入了解順序表的基本特性,以便在實際問題背景下靈活運用它們。 2.深入理解和靈活掌握順序表的插入、刪除等操作。 1.硬件:每個學生需配備計算機一臺。 2.軟件:Windows操作系統(tǒng)+Visual C++。 ????1.將建表、遍歷、插入、刪除分別

    2024年02月07日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序表基本操作的實現(xiàn)(C語言)

    【數(shù)據(jù)結(jié)構(gòu)】順序表基本操作的實現(xiàn)(C語言)

    ?? 作者簡介:一名在后端領(lǐng)域?qū)W習,并渴望能夠?qū)W有所成的追夢人。 ?? 個人主頁:蝸牛牛啊 ?? 系列專欄:??數(shù)據(jù)結(jié)構(gòu)、??C++ ?? 學習格言:博觀而約取,厚積而薄發(fā) ?? 歡迎進來的小伙伴,如果小伙伴們在學習的過程中,發(fā)現(xiàn)有需要糾正的地方,煩請指正,希望能夠與

    2024年02月16日
    瀏覽(25)
  • 鏈棧的基本操作(超詳細)

    鏈棧的基本操作(超詳細)

    目錄 前言 一.鏈棧的定義? 二、鏈棧的c++語言結(jié)構(gòu)描述表示 三、鏈棧中基本操作的實現(xiàn)? 3.1鏈棧的初始化 3.2判斷鏈棧是否為空? 3.3求鏈棧的長度? 3.4 鏈棧的入棧 3.4 鏈棧的出棧 3.5求棧頂元素? 3.6銷毀棧 四.鏈棧的具體實現(xiàn)? 五.測試結(jié)果 六、總結(jié)? 本文參考王卓老師的數(shù)據(jù)結(jié)

    2023年04月25日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)之棧的基本操作

    數(shù)據(jù)結(jié)構(gòu)之棧的基本操作

    該順序棧涉及到了存儲整型數(shù)據(jù)的順序棧還有存儲字符型數(shù)據(jù)的順序棧 實現(xiàn)的功能有:入棧、出棧、判斷是否為空棧、求棧的長度、清空棧、銷毀棧、得到棧頂元素 此外根據(jù)上述功能,編寫了數(shù)值轉(zhuǎn)換(十進制轉(zhuǎn)化八進制)方法、括號匹配方法。 控制臺界面展示: 進棧展示

    2024年01月23日
    瀏覽(22)
  • 棧的概念及其基本操作--詳細(C++)

    棧的概念及其基本操作--詳細(C++)

    基本概念及相關(guān)術(shù)語: 棧是只允許 在一端 進行插入和刪除操作的 線性表 。 由此可見,棧也是線性表的一種,只是棧的操作受限制的線性表。 棧頂(top):線性表允許插入和刪除的那一段。 值得注意的是,棧頂指針top的指向是有些兩種方式的,一種是指向棧頂當前元素,

    2024年02月08日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包