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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

简单用数组模拟顺序栈(c++)

發布時間:2025/4/5 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单用数组模拟顺序栈(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++)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。