日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-顺序栈的基本操作(C语言实现)

發(fā)布時(shí)間:2023/12/9 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-顺序栈的基本操作(C语言实现) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

參考書:王道考研數(shù)據(jù)結(jié)構(gòu)

(此貼為博主學(xué)習(xí)408的筆記,因博主也是學(xué)習(xí)者,個(gè)人總結(jié)如有錯(cuò)誤歡迎指正。如有侵權(quán)請(qǐng)告知,馬上刪除致歉)??

目錄

一:棧的定義

二:常用的基本操作

三:操作代碼

1.棧的順序存儲(chǔ)類型描述

2. 棧判空? ? ? ??

3.初始化一個(gè)棧

4.進(jìn)棧

5.出棧

6.讀取棧頂元素

7.清空棧

8.銷毀棧

9.遍歷輸出

四:完整代碼


一:棧的定義

? ? ? ? ? ? ? ? 棧(Stack)是一種后進(jìn)先出的線性表,限定這種類型的線性表為只能在某一端進(jìn)行插入和刪除操作。

? ? ? ? ? ? ? ? 基于棧的特性,我們把它稱作后進(jìn)先出表(Last in First out)LIFO。

? ? ? ? ? ? ? ? 常用術(shù)語:

? ? ? ? ? ? ? ? ? ? ? ? ? ?棧頂(Top):線性表允許插入和刪除的那一端。

? ? ? ? ? ? ? ? ? ? ? ? ? ?棧底:不可操作的那一端。

? ? ? ? ? ? ? ? ? ? ? ? ? ?空棧:不包含任何元素的空表。

二:常用的基本操作

? ? ? ? ? ? ? ? 在國(guó)內(nèi)計(jì)算機(jī)研究生考試中,如果沒有明確規(guī)定操作名稱,題干沒有給出限制,則可以直接使用這些常用操作函數(shù)。

? ? ? ? ? ? ? ? 以下是基于嚴(yán)蔚敏版的基本操作:

? ? ? ? InitStack(&S):????????初始化一個(gè)空表。

? ? ? ? StackEmpty(&S):? ?判斷棧是否為空,若為空則返回true,否則為false。

? ? ? ? Push(&S,x):? ? ? ? ? ?進(jìn)棧,若棧未滿,則將新元素插入到S.top+1的位置。

? ? ? ? Pop(&S,&x):? ? ? ? ? 出棧,若棧未空,則將棧頂S.top元素賦值給x,并將Top指針-1。

? ? ? ? GetTop(S,&x) :? ? ??讀取棧頂元素,若棧未空,將棧頂元素賦值給x

? ? ? ? DestroyStack(&S):銷毀棧,并釋放棧所用空間。

? ? ? ? ClearStack(&S):? ? 清空棧,將Top指針指向-1的初始化位置。

三:操作代碼

1.棧的順序存儲(chǔ)類型描述

#define MaxSize 10/**棧的順序存儲(chǔ)類型描述棧頂指針S.top,初始化時(shí)設(shè)置S.top=-1;棧頂元素S.data[S.top]; **/ typedef struct SqStack{int data[MaxSize];//存放棧元素int top; //棧頂指針 }SqStack;

2. 棧判空? ? ? ??

/**棧判空 **/ bool StackEmpty(SqStack S){if(S.top==-1) //棧空return true;else return false; }

功能演示

?

3.初始化一個(gè)棧

/**初始化一個(gè)棧,并將棧頂指針指向-1 */ void InitStack(SqStack &S){S.top = -1; //初始化棧頂指針 }

4.進(jìn)棧

/**進(jìn)棧 **/ bool Push(SqStack &S,int x){if(S.top==MaxSize-1) //棧頂指針指向最后一個(gè),棧滿,報(bào)錯(cuò),因?yàn)閿?shù)組下標(biāo)從0開始,數(shù)組下標(biāo)最大值為Max-1return false;S.data[++S.top] = x; //應(yīng)熟練掌握++i和i++的區(qū)別,這里因?yàn)閠op指針指向的是棧目前最后一個(gè)元素,需要將指針移到下一個(gè)再裝填新元素,否則會(huì)覆蓋,所以使用++S.top。return true; }

功能演示

?

5.出棧

/**出棧 */ bool Pop(SqStack &S,int &x){if(S.top==-1)return false;x = S.data[S.top--]; //將棧頂元素彈出,指針往下-1。return true; }

功能演示?

6.讀取棧頂元素

/**讀取棧頂元素 */ int GetTop(SqStack S){if(S.top==-1)return false;int x = S.data[S.top];return x; }

功能演示

?

7.清空棧

/*清空棧 */ bool ClearStack(SqStack &S){if(S.top==-1)return false;S.top=-1; //將棧頂指針指向-1,遍歷的時(shí)候到top就結(jié)束return true; }

8.銷毀棧

/**銷毀棧 */ bool DestroyStack(SqStack &S){if(S.top==-1)return false;free(S.data);return true; }

9.遍歷輸出

/**遍歷輸出棧 */ bool PrintStack(SqStack S){if(S.top==-1){printf("棧為空");return false;}for(int i =0;i<=S.top;i++){printf(" |%d|\n",S.data[S.top-i]);}return true; }

功能演示

?

四:完整代碼

#include <stdio.h> #include <stdlib.h>/********************************************** 制作人:祝星。 項(xiàng)目名稱:數(shù)據(jù)結(jié)構(gòu)-順序棧的基本操作(C語言實(shí)現(xiàn)) 完成時(shí)間:2022年7月21日 完成內(nèi)容:棧的定義,創(chuàng)建,判空 運(yùn)行環(huán)境:win10 程序環(huán)境:VC++ 文件語言:C語言 文件類型:.cpp 注:1.VC++的.cpp環(huán)境,&為取地址。 ***********************************************/#define MaxSize 10/**棧的順序存儲(chǔ)類型描述棧頂指針S.top,初始化時(shí)設(shè)置S.top=-1;棧頂元素S.data[S.top]; **/ typedef struct SqStack{int data[MaxSize];//存放棧元素int top; //棧頂指針 }SqStack;/**棧判空 **/ bool StackEmpty(SqStack S){if(S.top==-1) //棧空return true;else return false; }/**初始化一個(gè)棧,并將棧頂指針指向-1 */ void InitStack(SqStack &S){S.top = -1; //初始化棧頂指針 }/**進(jìn)棧 **/ bool Push(SqStack &S,int x){if(S.top==MaxSize-1) //棧頂指針指向最后一個(gè),棧滿,報(bào)錯(cuò),因?yàn)閿?shù)組下標(biāo)從0開始,數(shù)組下標(biāo)最大值為Max-1return false;S.data[++S.top] = x; //應(yīng)熟練掌握++i和i++的區(qū)別,這里因?yàn)閠op指針指向的是棧目前最后一個(gè)元素,需要將指針移到下一個(gè)再裝填新元素,否則會(huì)覆蓋,所以使用++S.top。return true; }/**出棧 */ bool Pop(SqStack &S,int &x){if(S.top==-1)return false;x = S.data[S.top--]; //將棧頂元素彈出,指針往下-1。return true; }/**讀取棧頂元素 */ int GetTop(SqStack S){if(S.top==-1)return false;int x = S.data[S.top];return x; }/*清空棧 */ bool ClearStack(SqStack &S){if(S.top==-1)return false;S.top=-1; //將棧頂指針指向-1,遍歷的時(shí)候到top就結(jié)束return true; }/**銷毀棧 */ bool DestroyStack(SqStack &S){if(S.top==-1)return false;free(S.data);return true; }/**遍歷輸出棧 */ bool PrintStack(SqStack S){if(S.top==-1){printf("棧為空");return false;}for(int i =0;i<=S.top;i++){printf(" |%d|\n",S.data[S.top-i]);}return true; }int main(){SqStack S;InitStack(S);int chose;int push,pop;printf("\n---------------------------------------------\n");printf("請(qǐng)選擇功能:\n1:入棧 2:出棧 3:判空 4:讀取棧頂元素 4:遍歷 6:清空棧 7:銷毀棧\n");scanf("%d",&chose);while(chose == 0 || chose == 1 ||chose == 2 ||chose == 3 ||chose == 4 ||chose == 5 ||chose == 6 ||chose == 7 ){switch(chose){case 0:scanf("%d",&chose);continue;case 1:printf("請(qǐng)輸入入棧數(shù):");scanf("%d",&push);Push(S,push);printf("入棧后為:\n");PrintStack(S);chose = 0;break;case 2:Pop(S,pop);printf("將棧頂元素 %d 出棧\n",pop);printf("出棧后為:\n");PrintStack(S);pop = NULL;chose = 0;break;case 3:if(StackEmpty(S)){printf("棧空\n");}elseprintf("棧不為空\n");chose = 0;break;case 4:printf("棧頂元素為%d",GetTop(S));chose = 0;break;case 5:PrintStack(S);chose = 0;break;case 6:ClearStack(S);printf("清空棧\n");chose = 0;break;case 7:DestroyStack(S);printf("銷毀棧\n");chose = 0;break;}printf("\n---------------------------------------------\n");printf("請(qǐng)選擇功能:\n1:入棧 2:出棧 3:判空 4:讀取棧頂元素 5:遍歷 6:清空棧 7:銷毀棧\n");}return 0; }

總結(jié)

以上是生活随笔為你收集整理的数据结构-顺序栈的基本操作(C语言实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。