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

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

這篇具有很好參考價值的文章主要介紹了順序棧的基本操作(存儲結(jié)構(gòu)設計、初始化、判空、判滿、入棧、出棧、取棧頂元素、遍歷輸出棧內(nèi)元素)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#define ElemType char
#define Status int
#define StackInitSize 100
//其實也可以寫成 typedef int ElemType;

//棧的順序結(jié)構(gòu)表示
typedef struct 
{
	ElemType* base;
	ElemType* top;
	int stacksize;
}seqstack;

//初始化一個順序棧
Status InitStack(seqstack& s)//傳遞的是地址
{
	s.base = (ElemType*)malloc(StackInitSize * sizeof(ElemType));
	if (!s.base) 
	{
		return 0;
	}
	s.top = s.base;
	s.stacksize = StackInitSize;
	return 1;
}

//創(chuàng)建棧
Status CreateStack(seqstack &s)//其實不是特別清楚什么時候傳遞的參數(shù)為地址
{
	int m = 0;
	char n;//n作為接收從鍵盤中輸入的值
	printf("請輸入元素,若輸入完成則輸入$:\n");
	//getchar();
	while (m < StackInitSize)
	{
		//scanf_s("%c", &n);
		n = getchar();
		if (n != '$')
		{
			*s.top = n;//把值放進棧里邊,雙重指針表非指針,嘿嘿
			s.top++;//頭結(jié)點往上移動
		}
		else
			return 1;
		//scanf_s("%c", &n);
		//if (n == '$')
		//	return 1;
		//*s.top = n;//將n的值賦給top
		//s.top++;//頭結(jié)點往上移動
		m++;
	}
}

//判斷棧是否為空
Status StackEmpty(seqstack s)
{
	if (s.top == s.base)
		return 0;
	else
		return 1;
}

//遍歷輸出棧內(nèi)元素
//(因為要對棧進行判空操作,則先寫判空)

Status print(seqstack s)
{
	ElemType* i;
	i = s.top;//服從后進先出的原則
	if (StackEmpty(s) == 0)
	{
		printf("--此棧為空棧--\n");
		return 0;
	}
		
	while (i > s.base)
	{
		i--;
		printf("%c", *i);
	}
	printf("\n");
	return 1;
}

//進行入棧操作的編寫,入棧之前需要進行判滿的操作
Status PushStack(seqstack& s, ElemType& e)
{
	if (s.top - s.base == 0)//判滿
	{
		printf("--此棧已滿--\n");
		return 0;
	}
	else
		*s.top++ = e;//把頭結(jié)點向上移動后,把e的地址作為頭結(jié)點的地址域
}
//出棧,后進先出,則該元素為棧頂元素
char PopStack(seqstack& s)
{
	if (StackEmpty == 0)
	{
		printf("--此棧為空棧--\n");
		return 0;
	}
	else
	{
		char e;
		s.top--;//因為頭結(jié)點指向棧頂元素的上一個節(jié)點,所以需要下移指向棧頂元素
		e = *s.top;// 實際上此元素并沒真正刪除,仍在S.top中,
		//但是如果插入元素,就會被更新,就像是刪除了一樣
		return e;
	}
}


//主函數(shù)
int main()
{
	seqstack s;
	InitStack(s);
	//printf("%d", InitStack(s));//初始化后,檢驗初始化是否完成
	printf("---創(chuàng)建一個順序棧---\n");
	CreateStack(s);
	/*
	int a = CreateStack(s);
	printf("%d", a);//創(chuàng)建棧后,檢驗創(chuàng)建是否完成
	*/
	printf("---此刻棧是否為空?---\n");
	if (StackEmpty(s) == 1)
		printf("--此棧不為空--\n");
	else
		printf("--此棧為空棧--\n");
	printf("---打印這個順序棧:---\n");
	print(s);
	
	printf("---進行入棧操作---\n");
	printf("---請輸入要入棧的字母---\n");
	getchar();
	char a;
	scanf_s("%c", &a);
	PushStack(s, a);
	printf("---打印這個順序棧:---\n");
	print(s);

	printf("---進行出棧操作---\n");
	char b;
	b = PopStack(s);//取棧頂元素
	printf("--出棧的元素是%c--\n", b);
	printf("---打印這個順序棧:---\n");
	print(s);
	return 0;
}

以上為總的代碼,對于棧滿時存在一些問題待改進

————————————————————————————————————————

以下為代碼編寫過程,有參考網(wǎng)上大佬的代碼

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

?棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

創(chuàng)建棧后報錯,在scanf_s處缺少&符號?

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

會執(zhí)行兩遍創(chuàng)建棧?

?棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

在主函數(shù)里邊確實有兩個?

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

修改后,基本邏輯沒有問題,但是需要輸出棧的元素,才能夠進一步確定是否成功創(chuàng)建棧

遍歷輸出棧的元素,首先需要對棧進行判空操作,則首先進行判空

//判斷棧是否為空
Status StackEmpty(seqstack s)
{
	if (s.top == s.base)
		return 0;
	else
		return 1;
}
//輸入棧是否為空
void PrintStackEmpty(seqstack s)
{
	if (StackEmpty(s) == 1)
		printf("--此棧不為空--\n");
	else
		printf("--此棧為空棧--\n");
}

?本來想在主函數(shù)里簡單化,但是吧,輸出就太簡單了

printf("---此刻棧是否為空?---\n");
	void PrintStackEmpty(seqstack s);

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

?這是為什么呢?

先檢驗一下吧,

printf("---此刻棧是否為空?---\n");
	if (StackEmpty(s) == 1)
		printf("--此棧不為空--\n");
	else
		printf("--此棧為空棧--\n");

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

兩種情況都為空,emmm,直覺告訴我是在創(chuàng)建棧的時候出現(xiàn)了問題

?棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

?對比網(wǎng)上資源之后發(fā)現(xiàn),是在傳遞參數(shù)時,別人傳的時地址,我傳的是結(jié)構(gòu)體,但是吧其實不是特別清楚什么時候傳遞的參數(shù)為地址

修改后,

//創(chuàng)建棧
Status CreateStack(seqstack &s)//其實不是特別清楚什么時候傳遞的參數(shù)為地址
{
	int m = 0;
	char n;//n作為接收從鍵盤中輸入的值
	printf("請輸入元素,若輸入完成則輸入$:\n");
	//getchar();
	while (m < StackInitSize)
	{
		//scanf_s("%c", &n);
		n = getchar();
		if (n != '$')
		{
			*s.top = n;//把值放進棧里邊,雙重指針表非指針,嘿嘿
			s.top++;//頭結(jié)點往上移動
		}
		else
			return 1;
		//scanf_s("%c", &n);
		//if (n == '$')
		//	return 1;
		//*s.top = n;//將n的值賦給top
		//s.top++;//頭結(jié)點往上移動
		m++;
	}
}

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

?成功了哦,哈哈哈,再稍微修改一下下

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

修改之后發(fā)現(xiàn)

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

咋說呢

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

不止一條語句,要花括號括起來,檢驗的重要性

?接下來進行入棧操作,入棧之前需要進行判滿的操作

//進行入棧操作的編寫,入棧之前需要進行判滿的操作
Status PushStack(seqstack& s, ElemType& e)
{
	if (s.top - s.base == 0)//判滿
		return 0;
	else
		*s.top++ = e;//把頭結(jié)點向上移動后,把e的地址作為頭結(jié)點的地址域
}

棧的基本操作-初始化、入棧、出棧、判空等,數(shù)據(jù)結(jié)構(gòu),c語言,c++,數(shù)據(jù)結(jié)構(gòu),算法

出棧

//出棧,后進先出,則該元素為棧頂元素
char PopStack(seqstack& s)
{
	if (StackEmpty == 0)
	{
		printf("--此棧為空棧--\n");
		return 0;
	}
	else
	{
		char e;
		s.top--;//因為頭結(jié)點指向棧頂元素的上一個節(jié)點,所以需要下移指向棧頂元素
		e = *s.top;// 實際上此元素并沒真正刪除,仍在s.top中,
		//但是如果插入元素,就會被更新,就像是刪除了一樣
		return e;
	}
}

取棧頂元素和即為棧頂元素出棧文章來源地址http://www.zghlxwxcb.cn/news/detail-743130.html

到了這里,關(guān)于順序棧的基本操作(存儲結(jié)構(gòu)設計、初始化、判空、判滿、入棧、出棧、取棧頂元素、遍歷輸出棧內(nèi)元素)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【頭歌】順序棧的基本操作及應用

    任務描述 本關(guān)任務是實現(xiàn)順序棧的基本操作函數(shù),以實現(xiàn)判斷棧是否為滿、是否為空、求棧元素個數(shù)、進棧和出棧等功能。 相關(guān)知識 棧的基本概念 棧 是一種特殊的線性表,其特殊性體現(xiàn)在元素插入和刪除運算上,它的插入和刪除運算僅限定在表的某一端進行,不能在表中

    2024年02月02日
    瀏覽(35)
  • 棧的定義及基本操作實現(xiàn)(順序棧)

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

    個人主頁:【??個人主頁】 系列專欄:【??數(shù)據(jù)結(jié)構(gòu)與算法】 學習名言:天子重英豪,文章教兒曹。萬般皆下品,惟有讀書高 第一章 ?? 學前知識 第二章 ?? 單向鏈表 第三章 ?? 遞歸 相信大家小時后一定玩過玩具槍吧,在我們裝子彈時玩具槍的子彈只能從彈夾的一

    2023年04月08日
    瀏覽(51)
  • 【數(shù)據(jù)結(jié)構(gòu)】(順序表)C語言實現(xiàn)線性表順序存儲的創(chuàng)建、插入、刪除、查找、輸出等基本操作(附完整代碼)

    要求:利用書本上的線性表的順序存儲結(jié)構(gòu)定義 #define MAXSIZE 100 //順序表可能達到的最大長度 typedef struct{ ElemType *elem; // 存儲空間基址 int length; // 當前長度 int listsize; // 當前分配的存儲容量(以sizeof(ElemType)為單位) } SqList; 1)編寫完成下列功能的函數(shù): (1)初始化一個線性表

    2024年04月28日
    瀏覽(99)
  • 數(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)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈棧的基本操作(C語言)

    零零總總搜索了一些關(guān)于鏈棧的資料,了解了鏈棧的基本操作,一直覺得別人寫的代碼或多或少存在一些問題,所以打算自己寫一篇關(guān)于鏈棧的文章,也算是對所學知識的梳理和鞏固了。 首先說明本文使用C語言進行鏈棧的基本操作,鏈棧是無頭結(jié)點的。這里補充說明一下,

    2024年02月05日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】 鏈棧的基本操作 (C語言版)

    【數(shù)據(jù)結(jié)構(gòu)】 鏈棧的基本操作 (C語言版)

    目錄 一、鏈棧 1、鏈棧的定義: 2、鏈棧的優(yōu)缺點: 二、鏈棧的基本操作算法(C語言)???? 1、宏定義 ??2、創(chuàng)建結(jié)構(gòu)體 3、鏈棧的初始化? ?4、鏈棧的進棧 5、鏈棧的出棧 6、獲取棧頂元素 7、棧的遍歷輸出 8、鏈棧的判空 ?9、求鏈棧的棧長 10、鏈棧的清空 11、鏈棧的銷毀

    2024年01月24日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)學習——C語言對棧的基本操作

    數(shù)據(jù)結(jié)構(gòu)學習——C語言對棧的基本操作

    ? ? ? ? ?棧(Stack)是一種常用的數(shù)據(jù)結(jié)構(gòu),遵循先進后出(LIFO)的原則,對表尾進行操作,常用于臨時存儲和撤銷等操作,其基本操作包括棧的創(chuàng)建、入棧(也叫壓棧Push)、出棧(又稱彈棧)、棧的遍歷、棧的清空(clear)、棧的銷毀(destroy)等。 ? ? ? ? 棧的創(chuàng)建有兩種方式,一種是通

    2024年02月07日
    瀏覽(30)
  • 【數(shù)據(jù)結(jié)構(gòu)】棧和隊列(棧的基本操作和基礎(chǔ)知識)

    【數(shù)據(jù)結(jié)構(gòu)】棧和隊列(棧的基本操作和基礎(chǔ)知識)

    ??個人主頁: 秦jh__ https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 ???系列專欄: 《數(shù)據(jù)結(jié)構(gòu)》 https://blog.csdn.net/qinjh_/category_12536791.html?spm=1001.2014.3001.5482 目錄 ?前言 棧 棧的概念和結(jié)構(gòu) 棧的實現(xiàn) ?編輯 數(shù)組棧的實現(xiàn) 總的聲明 初始化 ?插入 刪除 取棧頂元素 銷毀 判斷是否為空

    2024年02月03日
    瀏覽(20)
  • 二叉樹的順序存儲及基本操作

    1、在樹中除根結(jié)點外,其余結(jié)點分成m(m≥0)個(A)的集合T1,T2,T3…Tm,每個集合又都是樹,此時結(jié)點T稱為Ti的父結(jié)點,Ti稱為T的子結(jié)點(1≤i≤m)。 A、互不相交B、可以相交C、葉節(jié)點可以相交D、樹枝結(jié)點可以相交 2、在一棵度為3的樹中,度為3的結(jié)點數(shù)為2個,度為2的結(jié)點

    2024年02月06日
    瀏覽(20)
  • 線性表的基本操作及在順序存儲及鏈式存儲的實現(xiàn)

    一個數(shù)據(jù)結(jié)構(gòu)的基本操作是指其最核心、最基本的操作。其他較復雜的操作可通過其基本操作來實現(xiàn)。線性表的主要操作如下 注意:1:基本操作的實現(xiàn)取決于采用哪種存儲結(jié)構(gòu),存儲結(jié)構(gòu)不同,算法的實現(xiàn)也不同 2:“” 表示c++中的引用調(diào)用。若存入的變量是指針變量,且

    2024年02月13日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包