古詩詞大全網 - 成語故事 - 什麽是棧?請說明詳細壹些

什麽是棧?請說明詳細壹些

壹、基本概念

棧(stack)在計算機科學中是限定僅在表尾進行插入或刪除操作的線形表。

棧是壹種數據結構,是只能在某壹端插入和刪除的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後壹個數據被第壹個讀出來)。

棧是允許在同壹端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的壹端稱為棧頂(top),另壹端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入壹般稱為進棧(PUSH),刪除則稱為退棧(POP)。 棧也稱為後進先出表(LIFO表)。

棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧!

棧的模型二、基本算法

1、進棧(PUSH)算法

①若TOP≥n時,則給出溢出信息,作出錯處理(進棧前首先檢查棧是否已滿,滿則溢出;不滿則作②);

②置TOP=TOP+1(棧指針加1,指向進棧地址);

③S(TOP)=X,結束(X為新進棧的元素);

2、退棧(POP)算法

①若TOP≤0,則給出下溢信息,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作②);

②X=S(TOP),(退棧後的元素賦給X);

③TOP=TOP-1,結束(棧指針減1,指向棧頂)。

三、棧的實現

在pascal下的實現

1、數組型

Const

m=棧表目數的上限;

Type

stack=array[1..m] of stype; {棧類型}

Var

s:stack;{棧}

top:integer; {棧頂指針}

2、記錄型

const

m=棧表目數的上限;

type

stack=record

elem: array[1..m] of elemtp;

top:0..m; {棧頂指針}

end;

Var

s:stack;{棧}

在C/C++中棧的壹些基本操作:

C代碼:

/*

@**2009/09/24

棧的基本操作

*/

#include <iostream>

#define MaxSize 100

using namespace std;

typedef struct

{

int data[MaxSize];

int top;

}SqStack;

void InitStack(SqStack *st) //初始化棧

{

st->top=-1;

}

int StackEmpty(SqStack *st) //判斷棧為空

{

return (st->top==-1);

}

void Push(SqStack *st,int x) //元素進棧

{

if(st->top==MaxSize-1)

printf("棧上溢出!\n");

else

{

st->top++;

st->data[st->top]=x;

}

}

void Pop(SqStack *st) //退棧

{

if(st->top==-1)

printf("棧下溢出\n");

else

st->top--;

}

int Gettop(SqStack *st) //獲得棧頂元素

{

if(st->top==-1)

{

printf("棧空\n");

return 0;

}

else

return st->data[st->top];

}

void Display(SqStack *st) //打印棧裏元素

{

int i;

printf("棧中元素:");

for(i=st->top;i>=0;--i)

printf("%d ",st->data[i]);

printf("\n");

}

int main()

{

SqStack L;

SqStack *st=&L;

InitStack(st);

printf("棧空:%d\n",StackEmpty(st));

for(int i=1;i<10;++i)

Push(st,i);

Display(st);

printf("退壹次棧\n");

Pop(st);

printf("棧頂元素:%d\n",Gettop(st));

Pop(st);

Display(st);

return 0;

}