說到棧,往往想到堆。

先說說操作系統棧和堆的區別

一個由C/C++編譯的程序佔用的內存分爲以下幾個部分  
  1、棧區(stack)—   由編譯器自動分配釋放   ,存放函數的參數值,局部變量的值等。其  
  操作方式類似於數據結構中的棧。  
  2、堆區(heap)   —   一般由程序員分配釋放,   若程序員不釋放,程序結束時可能由OS回  
  收   。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。  
  3、全局區(靜態區)(static)—,全局變量和靜態變量的存儲是放在一塊的,初始化的  
  全局變量和靜態變量在一塊區域,   未初始化的全局變量和未初始化的靜態變量在相鄰的另  
  一塊區域。   -   程序結束後由系統釋放。  
  4、文字常量區   —常量字符串就是放在這裏的。   程序結束後由系統釋放  
  5、程序代碼區—存放函數體的二進制代碼。 

下面說說棧的 一些操作。

#define StackSize 100
typedef char datatype;
typedef struct {
	datatype data[StackSize];
	int top;
}seqstack;
int stackfull(seqstack *s)
{
	return(s->top==StackSize-1);
}
int stackempty(seqstack *s)
{
	return(s->top==-1);
}
//入棧
void push(seqstack *s,datatype x)
{
	if (stackfull(s))
		error("stack overflow");
	s->data[++s->top]=x;
}
//出棧
char pop(seqstack *s)
{
	datatype x;
	if (stackempty(s))
		error("stack underflow");
	x=s->data[s->top];
	s->top--;
	return x;

}



發佈了35 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章