棧操作之順序棧
來源:程序員人生 發布時間:2014-10-08 09:15:48 閱讀次數:2949次
數據結構:
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為后進先出表。
操作系統:
由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧
棧使用的是一級緩存, 他們通常都是被調用時處于存儲空間中,調用完畢立即釋放。
具體操作有:初始化 判斷棧滿 判斷棧空 push pop 讀取棧頂
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define Stack_Size 50
#define StackElementType char
/*順序棧*/
typedef struct
{
StackElementType elem[Stack_Size]; /*用來存放棧中元素的一維數組*/
int top; /*用來存放棧頂元素的下標,top為-1表示空棧*/
}SeqStack;
/*初始化*/
void InitStack(SeqStack *S)
{
/*構造一個空棧S*/
S->top = -1;
}
/*判棧空*/
int IsEmpty(SeqStack *S) /*判斷棧S為空棧時返回值為真,反之為假*/
{
return(S->top==-1?TRUE:FALSE);
}
/*判棧滿*/
int IsFull(SeqStack *S) /*判斷棧S為滿棧時返回值為真,反之為假*/
{
return(S->top==Stack_Size-1?TRUE:FALSE);
}
int Push(SeqStack *S,StackElementType x)
{
if(S->top==Stack_Size-1)
return(FALSE); /*棧已滿*/
S->top++;
S->elem[S->top] = x;
return(TRUE);
}
int Pop(SeqStack *S,StackElementType *x)
{
/* 將棧S的棧頂元素彈出,放到x所指的存儲空間中 */
if(S->top == -1) /*棧為空*/
return(FALSE);
else
{
*x = S->elem[S->top];
S->top--; /* 修改棧頂指針 */
return(TRUE);
}
}
/*讀棧頂元素。*/
int GetTop(SeqStack *S,StackElementType *x)
{
/* 讀取棧S的棧頂元素,放到x所指的存儲空間中,但棧頂指針保持不變 */
if(S->top == -1) /*棧為空*/
return(FALSE);
else
{
*x = S->elem[S->top];
return(TRUE);
}
}
int main()
{
SeqStack T;
InitStack (&T);
StackElementType x,y;
x='@';
if(Push(&T,x))
cout<<"儲存成功!"<<endl;
else
cout<<"入棧失敗!"<<endl;
cout<<"目前T.top="<<T.top<<"讀取后="<<endl;
if(GetTop(&T,&x))
cout<<T.top<<endl;
else
cout<<"讀棧失敗!"<<endl;
if(Pop(&T,&y))
cout<<y<<endl;
else
cout<<"出棧失敗!"<<endl;
return 0;
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈