简单用数组模拟顺序栈(c++)
**棧是一種操作受限制的線性表,太多官方的話我也不說了,我們都知道棧元素是先進后出的,它有兩種存儲結構,分別是順序存儲結構和鏈式存儲結構。
**今天我先記一下順序存儲結構,后面我會加上鏈式存儲結構的。
**我看到別人的順序棧都是用別的方式來寫的,我現在這里用的是一維數組,也就是用數組模擬。由于要用到bool型,所以我直接用c++來寫,大家可以相應改成C語言的版本,并不難。
**順序棧的操作 無非是基本的八個,分別是初始化,出棧,入棧,是否為空,是否為滿,取棧頂元素,取有效元素個數,遍歷。
**如果用靜態數組模擬的話,不需要銷毀棧,(我個人覺得 如果有誤,請指正) 清空的話,直接初始化就行。順序棧的示意圖如下:
?
不多說了,直接給代碼參考:
在這里我用拼音來代替函數,讓新手看得明白一點,我這里用的是結構體來生成一個棧,這個棧有一百個格子,還有一個top指針,大家結合示意圖來看就會很形象的。
?
# include<iostream>
using namespace std;
typedef struct
{
???int d[100];//定義一個長度為100的一維數組這里可以隨便設置長度
???int top;//棧頂指針
} Stack;
void chushihua(Stack * s);//初始化一個棧
bool?em(Stack * s);//判斷是否為空
bool full(Stack * s);//判斷是否為滿
bool push(Stack * s,int a);//入棧
bool pop(Stack * s,int *a);//出棧
bool ding(Stack * s,int *a);//取棧頂元素
int len(Stack * s);//取有效元素個數
void bianli(Stack * s);//遍歷
?
?
?*****************************************************************
?
函數部分:
?
*****初始化一個棧*****
void chushihua(Stack * s);
{
???s->top=-1;? //結合示意圖讓top為-1? 就是初始化這個棧
}
?
*****判斷是否為空 *****
bool?em(Stack * s)
{
??? if(-1==s->top)
???????return true;
???else
???????return? false;
}
?
*****判斷是否為滿 *****
bool full(Stack * s)
{
?? if(99==s->top)//這里是因為數組的下標為零 所以對于一百來說 99就是最后一個“格子”
???????return true;
?? else
???????return false;
}
?
*****入棧*****
bool push(Stack * s,int a)
{
???if(full(s))? //滿了就不能入棧
???????return false;
???else
??? {
???????s->top++;? //結合圖 ?指針先加
???????s->d[s->top]=a;//? 再把數據存進對應的“格子”
???????return true;
??? }
}
?
?
?
*****出棧*****
bool pop(Stack * s,int *a)
{
???if(em(s))//? 空的當然不能出棧
???????return false;
???else
??? {
???????*a=s->d[s->top]; //把棧頂元素 付給 變量
???????s->top--; //指針減一
???????return true;
??? }
}
?
?
?
?
*****取棧頂元素*****
這里只是取棧頂元素 不對棧有任何操作
bool ding(Stack * s,int *a)
{
???if(em(s)) //同理 空棧沒有元素 就不行
???????return false;
???else
??? {
???????*a=s->d[s->top]; // 把棧頂的元素賦值即可
???????return true;
??? }
}
?
*****取有效元素長度*****
由圖我們可知,指針+1就是有效元素長度了
int len(Stack * s)
{
???return s->top+1;
}
?
*****遍歷*****
void bianli(Stack * s)
{
???int i;
???while(!em(s))//當不為空棧
??? {
???????pop(s,&i);? //我們就出棧并賦值
???????cout<<i<<" "; //?打印
??? }
???cout<<endl;//這是相當于C語言中的換行
}
*****************************************************************?
主函數部分(測試)
?
int main(void)
{
Stack s;
? ? int a,c;
? ? chushihua(&s);
? ? push(&s,1);
? ? push(&s,2);
? ? push(&s,3);
? ? push(&s,4);
? ? push(&s,5);
? ? ding(&s,&a);
? cout<<"有效長度為:"<<len(&s)<<" 棧頂元素為 "<<a<<endl;
? ? bianli(&s);
? ? return 0;
}
?如圖:
以上就是用數組模擬順序棧的過程,如果有什么問題或者bug,請在下方評論,我目前會天天上論壇的。
轉載于:https://www.cnblogs.com/yellowgg/p/6735334.html
總結
以上是生活随笔為你收集整理的简单用数组模拟顺序栈(c++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 长亭技术专栏 安全攻防技术分享
- 下一篇: ActiveMQ点对点的发送和接收