1. 程式人生 > >順序棧的基本操作 初始化 進棧 出棧 讀棧頂元素

順序棧的基本操作 初始化 進棧 出棧 讀棧頂元素

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

順序棧:利用一組地址連續的儲存單元依次存放自棧底到棧頂的資料元素,同時由於棧操作的特殊性,還必須附設一個位置指標top(棧頂指標)來動態地指示棧頂元素在順序棧中的位置。通常以top=-1表示空棧。

程式碼如下:

#include<iostream>

using namespace std;

#define  TRUE 1

#define  FALSE 0

//順序棧的儲存結構

#define Stack_Size 50 //設棧中元素個數為50

typedef struct

{

 int elem[Stack_Size];//用來存放棧中元素的一維陣列

 int top;//用來存放棧頂元素的下標,top=-1表示空棧

}SeqStack;


//初始化順序棧

void InitStack(SeqStack *S)

{

 S->top = -1;//構造一個空棧

}


//順序棧進棧運算,首先判斷棧是否已滿,若棧已滿,還要進棧就會發生上溢

int Push(SeqStack *S,int x)//將x置入S棧新棧頂

{

 if (S->top == Stack_Size - 1)//棧已滿

 {

  return FALSE;

 }

 S->top++;

 S->elem[S->top] = x;//把x入棧

 return TRUE;

}


//順序棧出棧運算,首先判斷棧是否為空,若棧空,還要出棧就會發生下溢

int Pop(SeqStack *S, int *x)//將S棧頂元素彈出,放到x所指的儲存空間中帶出

{

 if (S->top == - 1)//棧為空

 {

  return FALSE;

 }

 else

 {

  *x = S->elem[S->top];

  S->top--;//修改棧頂指標

  return TRUE;

 }

}


//順序棧讀棧頂元素運算

int GetPop(SeqStack *S, int *x)//將棧S棧頂元素讀出,放到x所指的儲存空間中,棧頂指標保持不變

{

 if (S->top == -1)//棧為空

 {

  return FALSE;

 }

 else

 {

  *x = S->elem[S->top];

  return TRUE;

 }

}

注意:在實現GetPop操作時,也可將引數SeqStack *S改為SeqStack S,將傳地址方式改為傳值方式。傳值比傳地址容易理解,但傳地址比傳值更節省空間與時間。

本文出自 “巖梟” 部落格,請務必保留此出處http://yaoyaolx.blog.51cto.com/10732111/1771270

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述