順序棧的代碼實現

棧是一種限定只在表尾進行插入或刪除操作的線性表,棧也是線性表。表頭稱為棧的底部,表尾稱為棧的頂部,表為空稱為空棧。

棧又稱為后進先出的線性表,棧也有兩種表示:順序棧與鏈式棧。順序棧是利用一組地址連續的存儲單元。依次存放從棧底到棧頂的數據元素。


#include<iostream>
using namespace std;
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10typedef  struct 
{int  * base;int  * top;int   stacksize;//當前棧可使用的最大容量} SqStack;void InitStack(SqStack &S)//構造一個空棧
{S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));if(!S.base) {cout<<"存儲分配失敗!!!"<<endl<<endl;}else{S.top=S.base;S.stacksize=STACK_INIT_SIZE;cout<<"構造成功!!!"<<endl;}
}void Push(SqStack &S,int e)//插入元素e為棧頂元素
{if(S.top-S.base>=S.stacksize){S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S.base) cout<<"存儲分配失敗!!!"<<endl<<endl;else{S.stacksize+=STACKINCREMENT;S.top=S.base+S.stacksize;}}*S.top++=e;
}void DisplayStack(SqStack &S) //從棧底到棧頂逐次顯示棧中的元素
{int *p;p=S.base;if(S.base==S.top)	cout<<"當前棧為空棧!!!"<<endl<<endl;else{cout<<"當前棧內元素為: ";while(p!=S.top){cout<<*(p)<<" ";p++;}cout<<endl;}
}int StackLength(SqStack S) //求長度
{int *p;p=S.base;int i=0;while(p!=S.top) {p++;i++;}return i;
}void pop(SqStack &S,int &e) //出棧
{ if (S.top==S.base) cout<<"操作失敗!!!"<<endl<<endl;else {e=*--S.top;DisplayStack(S);}
}void ClearStack(SqStack &S)//清空
{int b;while(S.top!=S.base) b=*--S.top;if(S.top==S.base) cout<<"順序棧已清空!!!"<<endl<<endl;
}void StackEmpty(SqStack S)//判空
{if(S.top==S.base) cout<<"順序棧為空!!!"<<endl<<endl;else cout<<"順序棧不為空!!!"<<endl<<endl;
}void DestroyStack(SqStack &S)
{S.base=NULL;cout<<"順序棧已銷毀!!!"<<endl<<endl;
}void GetTop(SqStack S,int &e)//返回棧頂元素
{if(S.top==S.base) cout<<"操作失敗!!!"<<endl<<endl;else{cout<<"棧頂元素為: ";e=*(S.top-1);cout<<e<<endl<<endl;}
}int main()
{cout<<"*  1、構造一個空棧       *"<<endl;cout<<"*  2、輸入棧的元素       *"<<endl;cout<<"*  3、輸出棧的元素       *"<<endl;cout<<"*  4、求棧的長度         *"<<endl;cout<<"*  5、求棧頂元素         *"<<endl;cout<<"*  6、刪除棧頂元素       *"<<endl;cout<<"*  7、清空已存在的棧     *"<<endl;cout<<"*  8、判斷棧是否為空     *"<<endl;cout<<"*  0、銷毀棧             *"<<endl;int n,k;SqStack S;for(n=0;n<15;n++)
{cout<<"請選擇0-8:  ";cin>>k;if(k==0) {DestroyStack(S);n=15;}if(k==1) InitStack(S);if(k==2) {int a;cout<<"輸入棧S的元素為: ";cin>>a;Push(S,a);DisplayStack(S);}if(k==3) DisplayStack(S);if(k==4) cout<<"棧的長度為: "<<StackLength(S)<<endl<<endl;if(k==5) {int c;GetTop(S,c);}if(k==6) {int b;pop(S,b);}if(k==7) ClearStack(S);if(k==8) StackEmpty(S);}
return 0;
}


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453358.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453358.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453358.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux5觀察doc目錄并截屏,linux截屏命令

linux系統我們有時需要用到截屏功能&#xff0c;下面由學習啦小編為大家整理了linux截屏命令的相關知識&#xff0c;希望對大家有幫助!linux截屏命令詳解import檢測&#xff1a;import --versionimprot安裝&#xff1a;sudo apt-get install importimport常用命令&#xff1a;1…

eclipse+tomcat開發web程序

環境&#xff1a;windows 7Eclipse Java EE IDE for Web Developerstomcat 7.02 插件&#xff1a;tomcatPluginV321.zip 一.配置Tomcat插件 我們創建一個myplugins文件夾用于存放插件&#xff0c;myplugins位于D:/Program Files/J2EE目錄下。eclipse安裝路徑為&#xff1a;D:/P…

LoadRunner參數包含逗號

loadrunner的參數以逗號區分&#xff0c; 如果參數本身包含逗號&#xff0c;則會報錯 使用","將逗號包起來即可&#xff0c;如下圖 轉載于:https://www.cnblogs.com/cherrysu/p/8507649.html

軟件創業見聞

今天應一位朋友的邀請&#xff0c;過去蹭了個飯吃&#xff0c;順便坐了一個下午在聊著。這位老哥是一家軟件公司的老板&#xff0c;原來是從硬件銷售轉型到做軟件這一塊。因為說到軟件這一塊&#xff0c;我就很想了解一下這位老哥對于2009年的大勢是怎么看的&#xff0c;在2009…

如何采用設置標志的方法來區分循環隊列的滿和空

設立一個標志位,比如說是flag 最開始時隊列為空,設flag0 當入隊的時候讓flag1 出隊的時候flag0 然后再加上判斷隊頭隊尾指針是否重合 重合,且flag0,則為空 重合且flag1,則為滿

linux內核定義的常用信號6,linux復習

(3)設定apache服務器的網頁根目錄&#xff1a;/home/htdocs(4)在此apache服務器上設定一個目錄/home/htdocs/inside,且此目錄只允許IP地址為192.168.1.5的主機訪問(5)定義apache服務器以獨立進程的方式運行2、某系統管理員需每天做一定的重復工作&#xff0c;請按照下列要求&am…

linux 腳本 整數 賦值,shell基礎!!熟悉編程規范與變量

一、SHELL規范SHELL簡單介紹Bash(/bin/bash)是目前大多數 Linux 版本采用的默認 Shell。Bash 的全稱為 Bourne Again Shell&#xff0c;是最受歡迎的開源軟件項目之一。SHELL腳本簡單的來說&#xff0c;就是將平時使用的各種 Linux 命令按順序保存到一個文本文件中&#xff0c;…

一維數組的定義方式

一維數組的定義方式 在C語言中使用數組必須先進行定義。 一維數組的定義方式為&#xff1a;類型說明符 數組名 [常量表達式];其中&#xff0c;類型說明符是任一種基本數據類型或構造數據類型。數組名是用戶定義的數組標識符。方括號中的常量表達式表示數據元素的個數&#xff…

UIButton或UILabel加個下劃線

UIButton ####Objective - C LXYHyperlinksButton.h interface LXYHyperlinksButton : UIButton {UIColor *lineColor; }-(void)setColor:(UIColor*)color; 復制代碼LXYHyperlinksButton.m #import "LXYHyperlinksButton.h"implementation LXYHyperlinksButton- (id)…

android studio發布項目到github

點擊file setting ,打開對話框&#xff0c;如下&#xff0c;判斷git是否安裝成功 選擇GitHub&#xff0c;填寫github地址及密碼 發布項目&#xff1a; 轉載于:https://www.cnblogs.com/haihai88/p/8514683.html

在不使用{}時,else執行到哪里結束

正常情況下,if-else語句使用{}.執行時也執行{}里面的所有語句&#xff0c;但是當語句比較簡單時&#xff0c; 可以不使用{},而直接在if或else的后面寫要執行的語句。 但是程序只會執行到if或else語句后的第一個“;”其余的程序不在if-else的程序范圍內。

6個變態的C語言寫的Hello World

下面的六個程序片段主要完成這些事情&#xff1a; 輸出Hello, World混亂C語言的源代碼 下面的所有程序都可以在GCC下編譯通過&#xff0c;只有最后一個需要動用C的編譯器g才能編程通過。 hello1.c #define _________ }#define ________ putchar#define _______ main#define …

linux系統pcb軟件下載,開源PCB設計軟件KiCad致力于下一個大版本的發布

KiCad仍然是PCB設計和其他功能的領先開源電子設計套件。KiCad在2018年取得了成功&#xff0c;System76甚至使用了該軟件作為與Thelio臺式計算機一起設計的子板PCB的一部分&#xff0c;但展望未來&#xff0c;開發人員仍在努力開發6.0版本。KiCad 6.0發布方式將采用重新設計的GT…

CocoaPods pod install/pod update更新慢的問題

最近使用CocoaPods來添加第三方類庫&#xff0c;無論是執行pod install還是pod update都卡在了Analyzing dependencies不動原因在于當執行以上兩個命令的時候會升級CocoaPods的spec倉庫&#xff0c;加一個參數可以省略這一步&#xff0c;然后速度就會提升不少。加參數的命令如下…

js call(),apply(),對象冒充,改變變量作用域

1.apply(); function box(n1,n2){return n1n2; } function pox(n1,n2){alert(box.apply(this,[n1,n2])); //this指window下全局屬性//這里沒有返回值,沒有運算,通過冒充box里的運算來執行 } pox(10,20); //30 注:如果參數過多,冒充對象傳參的時候可以寫成arguments fu…

數組元素的地址計算問題(一維到高維)

數組元素存儲地址的計算 一維數組 設一維數組A[n]存放在n個連續的存儲單元中&#xff0c;每個數組元素占一個存儲單元&#xff08;不妨設為C個連續字節&#xff09;.如果數組元素A[0]的首地址是L&#xff0c;則A[1]的首地址是LC&#xff0c;A[2]的首地址是L2C&#xff0c;… …

侯寧:不該撈的別去撈 踏空不是浪費時間

最近&#xff0c;偶然間在網上看到了一則寓言故事&#xff1a;《駱駝與北斗星》。文章不長&#xff0c;但內容豐富&#xff0c;講得很有趣&#xff0c;很有哲理&#xff0c;也很有啟發。尤其是在股市博弈中&#xff0c;許多人、許多機構都會在現實中扮演故事里的不同角色。因為…

大躍進和循序漸進

大躍進和循序漸進本身沒有對錯&#xff0c;只有跟具體情境結合起來才會產生對錯屬性。 好的大躍進就是不學走先學跑&#xff0c;deadline是第一生產力&#xff0c;一旦學會了更高級的&#xff0c;低級的自然而然就學會了。 好比武裝革命&#xff0c;是先攻打大城市還是攻打農村…

Hibernate 學習(一)

一、Hibernate 簡介 1、Hibernate 簡介 Hibernate是一個開放源代碼的對象關系映射(ORM)框架&#xff0c;它對JDBC進行了非常輕量級的對象封裝&#xff0c;它將POJO與數據庫表建立映射關系&#xff0c;是一個全自動的orm框架&#xff0c;hibernate可以自動生成SQL語句&#xff0…

(嚴蔚敏版)數組的順序存儲表示和實現代碼

#include<stdarg.h>#include<malloc.h> /* malloc()等 */#include<stdio.h> /* EOF(^Z或F6),NULL */#include<stdlib.h> /* atoi() */#include<io.h> /* eof() */#include<math.h> /* floor(),ceil(),abs() */#include<process.h> /…