數據結構模板之四:順序棧

①基本定義

是一種只允許在一端進行插入或刪除操作的線性表,允許操作的一端叫棧頂,另一端叫棧底

如果用一個無蓋的水杯來形容棧,那麼你接水與喝水的那一端便是棧頂,杯底則是棧底。

所以,棧的特點便是“後進先出”,棧的插入操作通常稱爲進棧,棧的刪除操作通常稱爲出棧。每次進棧的元素都會放在原先的棧頂元素之前成爲新的棧頂元素。當棧中沒有元素時稱爲空棧。

②存儲方式與結構

③實現

#include <iostream>
#include <cstdio>
#define MaxSize 50
using namespace std;
typedef int ElemType;

typedef struct
{
	ElemType data[MaxSize];           //存放棧中的數據元素	
	int top;                          //棧頂指針,即存放棧頂元素在data數組中的下標
}SqStack;                             //順序棧類型

/*****初始化棧*****/
void InitStack(SqStack * &s)
{
	s=(SqStack *)malloc(sizeof(SqStack));    //分配一個順序棧空間,首地址存放在s中
	s->top=-1;                               //棧頂指針置爲-1
}

/*****銷燬棧*****/
void DestroyStack(SqStack * &s)
{
	free(s);
}

/*****判斷棧是否爲空*****/
bool StackEmpty(SqStack *s)
{
	return (s->top==-1);
}

/*****進棧*****/
bool Push(SqStack * &s,ElemType e)
{
	if(s->top==MaxSize-1)                 //棧滿的情況,即棧上溢出
		return false;
	s->top++;                             //棧頂指針增1
	s->data[s->top]=e;                    //元素e放在棧頂指針處
	return true;
}

/*****出棧*****/
bool Pop(SqStack * &s,ElemType &e)
{
	if(s->top==-1)                        //棧爲空的情況下,即棧下溢出
		return false;
	e=s->data[s->top];                    //取棧頂元素
	s->top--;
	return true;
}

/*****取棧頂元素*****/
bool GetTop(SqStack *s,ElemType &e)
{
	if(s->top==-1)
		return false;
	e=s->data[s->top];
	s->top--;
	return true;
}

---代碼和部分內容參考自《數據結構教程》


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章