結論:後進先出(last in first out),簡稱為lifo線性表。
棧的基本運算有六種:
構造空棧:initstack(sqstack &s)
判棧空: stackempty(sqstack s)
判棧滿: stackfull(sqstack s)
進棧: push(sqstack &s, selemtype x)可形象地理解為壓入,這時棧中會多乙個元素,棧改變,所以用了&
退棧: pop(sqstack &s, selemtype &e) 可形象地理解為彈出,彈出後棧中就無此元素了,棧改變,所以用了&。
取棧頂元素:stacktop(sqstack s, selemtype &e)與彈出不同,只是使用棧頂元素的值,棧不變,所以無&。
我們要了解的是,在
順序棧中有"
上溢"和"
下溢"的概念。順序棧好比乙個箱子,我們在裡頭放了一摞磚,當我們要取磚頭的話只能從第一塊開始拿,那麼當我們把磚頭放到這個棧中超過盒子的頂部時就放不下了(超出箱子邊沿高度不算),這時就是"上溢","
上溢"也就是棧頂指標指出棧的外面,
顯然是出錯了。反之,當棧中已沒有磚頭時,我們再去拿,看看沒磚頭了,把箱子拎起來看看箱底,還是沒有,這就是"
下溢"。"
下溢"本身可以表示棧為空棧,
因此可以用它來作為控制轉移的條件。
下邊是順序棧的簡單操作以及乙個簡單例子:
#include "stdafx.h"
#include using namespace std;
#define stack_init_size 10
#define stack_increment 10
#define overflow -2
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
typedef int selemtype;
typedef int status;
typedef structsqstack;
status initstack(sqstack &q)
q.top = q.base;
q.stacksize = stack_init_size;
return ok;
}status gettop(sqstack q, selemtype &e)
e = *(q.top - 1);
return ok;
}status push(sqstack &q, selemtype e)
q.top = q.base + q.stacksize;
q.stacksize = q.stacksize + stack_increment;
} *q.top++ = e;
return ok;
}status pop(sqstack &q, selemtype &e)
e = *--q.top;
return ok;
}//棧的乙個使用例子,數值轉換,把任意乙個非負十進位制數轉換成八進位制數
status conversion()
int e;
cout << "輸出八進位制數:" << endl;
while (q.base != q.top)
return ok;
}int _tmain(int argc, _tchar* argv)
selemtype e;
gettop(s, e);
cout << "當前棧大小為:" << s.stacksize << endl;
cout << "棧頂元素為" << e << endl;
push(s, 10);
pop(s, e);
cout << "棧大小變為:" << s.stacksize << endl;
cout << "棧頂元素為" << e << endl;
conversion();
system("pause");
return 0;
}
realloc原型是extern void *realloc(void *mem_address, unsigned int newsize);
功能:
先判斷當前的指標是否有足夠的連續空間,如果有,擴大mem_address指向的位址,並且將mem_address返回,如果空間不夠,先按照newsize指定的大小分配空間,將原有資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來mem_address所指記憶體區域(注意:原來指標是自動釋放,不需要使用free),同時返回新分配的記憶體區域的首位址。即重新分配儲存器塊的位址。
棧 的基本操作。
include include typedef struct node node,pnode typedef struct stack stack,pstack void initialize pstack mystack 棧的初始化。int push stack pstack mystack,in...
棧的基本操作
描述 棧是一種重要的資料結構,它具有push k和pop操作。push k是將數字k加入到棧中,pop則是從棧中取乙個數出來。棧是後進先出的 把棧也看成橫向的乙個通道,則push k是將k放到棧的最右邊,而pop也是從棧的最右邊取出乙個數。假設棧當前從左至右含有1和2兩個數,則執行push 5和po...
棧的基本操作
下面先實現站的基本功能,最後通過乙個test來測試下方法是否實現 建個.c檔案 typedef struct seqstack 初始化 seqstack seqstackinit return null 判斷棧是否為空 int seqstackisempty seqstack s void seqs...