①基本定義
棧是一種只允許在一端進行插入或刪除操作的線性表,允許操作的一端叫棧頂,另一端叫棧底。
如果用一個無蓋的水杯來形容棧,那麼你接水與喝水的那一端便是棧頂,杯底則是棧底。
所以,棧的特點便是“後進先出”,棧的插入操作通常稱爲進棧,棧的刪除操作通常稱爲出棧。每次進棧的元素都會放在原先的棧頂元素之前成爲新的棧頂元素。當棧中沒有元素時稱爲空棧。
②存儲方式與結構
③實現
#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;
}
---代碼和部分內容參考自《數據結構教程》